2010-08-06 13 views
9

की सूची विलय करने के लिए शब्दकोशों की सूची के साथ:कैसे जैसे कि निम्न शब्दकोशों

user_course_information = [ 
    {'course_id': 1456, 'score': 56, 'name': 'History'}, 
    {'course_id': 316, 'score': 71, 'name': 'Science'}, 
    {'course_id': 926, 'name': 'Geography'} # Note: the student did not take this test 
] 

या यह होगा:

user_course_score = [ 
    {'course_id': 1456, 'score': 56}, 
    {'course_id': 316, 'score': 71} 
] 
courses = [ 
    {'course_id': 1456, 'name': 'History'}, 
    {'course_id': 316, 'name': 'Science'}, 
    {'course_id': 926, 'name': 'Geography'} 
] 

उन्हें शब्दकोशों की निम्न सूची में गठबंधन करने के लिए सबसे अच्छा तरीका क्या है डेटा को अलग-अलग स्टोर करने के लिए बेहतर हो, जैसे:

courses = { 
    '1456': 'History', 
    '316': 'Science', 
    '926': 'Geography' 
} 

आपकी सहायता के लिए धन्यवाद।

+0

मैं एडम जवाब स्वीकार कर लिया है के रूप में यह मैं वास्तव में क्या जरूरत है। अन्य उत्तरों - सुझाव है कि मैं डेटा को शब्दकोश के रूप में पुन: व्यवस्थित करता हूं - ठीक काम करता है, लेकिन मेरे प्रोजेक्ट के लिए मैं ऐड्स को चाबियों के रूप में उपयोग नहीं करता। – Chris

उत्तर

17

यहाँ एक संभव समाधान है: आप तो प्रति-उपयोगकर्ता डाटा स्टोर करने की कुछ इस तरह कर सकता है

[{'course_id': 1456, 'name': 'History', 'score': 56}, 
{'course_id': 316, 'name': 'Science', 'score': 71}, 
{'course_id': 926, 'name': 'Geography'}] 

आप देख सकते हैं, मैं प्रयोग किया जाता है आधे रास्ते के रूप में एक शब्दकोश ('विलय')। बेशक, आप अपने डेटा को अलग-अलग स्टोर करके एक कदम छोड़ सकते हैं, लेकिन यह उन चर के लिए आपके द्वारा उपयोग किए जाने वाले अन्य उपयोगों पर भी निर्भर करता है।

सभी बेहतरीन।

+0

बिल्कुल सही। बहुत बहुत धन्यवाद। – Chris

+0

हे एडम। मैं इसे पूरा करने के लिए इस विधि का उपयोग कर रहा हूं लेकिन मेरी डिक्ट्स और सूचियां बहुत बड़ी हैं। मैं सोच रहा हूं कि क्या आपको ऐसा करने का एक तेज़ तरीका पता होगा। धन्यवाद। –

3

शब्दकोश मूल रूप से (कुंजी, मूल्य) जोड़े की एक सूची है।

अपने मामले में

,

user_course_score बस (course_id, स्कोर) का एक शब्दकोश हो सकता है बजाय शब्दकोशों की एक सूची (आप इसे अनावश्यक रूप से उलझी कर रहे हैं)

इसी तरह, ज़ाहिर है सिर्फ एक शब्दकोश हो सकता है की (course_id, नाम)

क्या आप अंत में सुझाव दिया है सही तरीके से :)

2

राहुल सही है; शब्दकोशों की एक सूची ऐसा करने का सही तरीका नहीं है। इस तरह के बारे में सोचें: शब्दकोश डेटा के टुकड़ों के बीच मैपिंग हैं। आपका अंतिम उदाहरण, courses, डेटा स्टोर करने का सही तरीका है;

def merge_lists(l1, l2, key): 
    merged = {} 
    for item in l1+l2: 
     if item[key] in merged: 
      merged[item[key]].update(item) 
     else: 
      merged[item[key]] = item 
    return merged.values() 

courses = merge_lists(user_course_score, courses, 'course_id') 

का उत्पादन:

courses = { 
    1456: 'History', 
    316: 'Science', 
    926: 'Geography' 
} # Note the lack of quotes 

test_scores = { 
    1456: { <user-id>: <score on History test> }, 
    316: { <user-id>: <score on History test> }, 
    926: { <user-id>: <score on History test> } 
} 
0

आप भी आजमा सकते:

[ 
    course.update(score) for course 
    in courses for score in user_course_score 
    if course['course_id'] == score['course_id'] 
] 

:)

संबंधित मुद्दे