2012-05-15 17 views
11

मान लीजिए कि मैं अजगर शब्दकोश की निम्न सूची करते हैं:अजगर शब्दकोशों की एक सूची अपडेट कर रहा है एक प्रमुख, एक और सूची से मूल्य जोड़ी के साथ

dict1 = [{'domain':'Ratios'},{'domain':'Geometry'}] 

और प्रकार की सूची:

list1 = [3, 6] 

मैं

dict1 = [{'domain':'Ratios', 'count':3}, {'domain':'Geometry', 'count':6}] 

मैं यह कैसे करना होगा: dict1 को अपडेट करने या इस प्रकार एक और सूची बनाने के लिए चाहते हैं?

+0

उदाहरण के अनुसार, इस प्रश्न का शीर्षक होना चाहिए: "किसी अन्य सूची से पायथन शब्दकोश मूल्यों की एक सूची अपडेट करना"। वर्तमान शीर्षक से मैं उस सूची 1 = [('अनुपात', 3), ('ज्यामिति', 6)] – yucer

उत्तर

21
>>> l1 = [{'domain':'Ratios'},{'domain':'Geometry'}] 
>>> l2 = [3, 6] 
>>> for d,num in zip(l1,l2): 
     d['count'] = num 


>>> l1 
[{'count': 3, 'domain': 'Ratios'}, {'count': 6, 'domain': 'Geometry'}] 

यह ऐसा करने का एक और तरीका है, एक सूची समझ के साथ इस समय जो उत्परिवर्तित नहीं है मूल:

>>> [dict(d, count=n) for d, n in zip(l1, l2)] 
[{'count': 3, 'domain': 'Ratios'}, {'count': 6, 'domain': 'Geometry'}] 
+0

धन्यवाद। दूसरा समाधान अपने वर्तमान रूप में त्रुटि उत्पन्न करता है –

+0

क्या आप अजगर 3 का उपयोग कर रहे हैं? मैं शायद इसे पार संगत होने के लिए बदल दूंगा। – jamylak

+0

अब यह पाइथन 3 में भी काम करता है अगर यह आपकी समस्या थी :) – jamylak

5

आप ऐसा कर सकता है:

for i, d in enumerate(dict1): 
    d['count'] = list1[i] 
2

आप ऐसा कर सकते हैं:

# list index 
l_index=0 

# iterate over all dictionary objects in dict1 list 
for d in dict1: 

    # add a field "count" to each dictionary object with 
    # the appropriate value from the list 
    d["count"]=list1[l_index] 

    # increase list index by one 
    l_index+=1 

यह समाधान एक नई सूची नहीं बनाता है। इसके बजाय, यह मौजूदा dict1 सूची अद्यतन करता है।

+0

पायथन के लिए बहुत वर्बोज़ लेकिन सब कुछ वास्तव में अच्छी तरह से बताता है। – jamylak

+1

हाँ आपके पास सही है! यह बहुत verbose है। लेकिन चूंकि यहां अन्य उत्तर कम वर्बोज़ हैं, मुझे लगता है कि एक और स्पष्टीकरण समाधान जोड़ना ठीक होगा .. –

+0

विस्तृत स्पष्टीकरण के लिए धन्यवाद। –

0

सूची समझ का उपयोग करना इसे करने का पाइथोनिक तरीका होगा।

[data.update({'count': list1[index]}) for index, data in enumerate(dict1)] 

dict1list1 से संबंधित मान के साथ अद्यतन किया जाएगा।

+1

-1 उत्परिवर्तन के लिए सूची समझ का उपयोग ** ** पायथनिक नहीं है। लूप के लिए एक सरल का प्रयोग करें। संदर्भ पर एक श्रम कार्य पर – jamylak

+0

अद्यतन आउटपुट प्रदान नहीं करता है। data.update() वापसी कोई नहीं। आप बाहर निकल जाएंगे [कोई नहीं, कोई नहीं, ....] –

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