2012-03-09 16 views
5

का हिस्सा के साथ एक dict अद्यतन मैं अक्सर इस संरचना का उपयोग कर अपने आप को लगता है: dict2 के सबसेट के साथ dict1 अद्यतन करने काएक और dict

dict1['key1'] = dict2['key1'] 
dict1['key2'] = dict2['key2'] 
dict1['key3'] = dict2['key3'] 

तरह।

मुझे लगता है कि वहाँ कोई प्रपत्र

dict1.update_partial(dict2, ('key1', 'key2', 'key3')) 

क्या दृष्टिकोण आप आमतौर पर लेने में ही बात कर के लिए एक निर्मित विधि है? क्या आपने इसके लिए अपना काम किया है? यह कैसा लग रहा है?

टिप्पणियां?


मैं प्रस्तुत की है अजगर-विचारों के लिए एक idea:

कभी कभी तुम एक dict जो एक और dict का उपसमुच्चय होती है चाहता हूँ। यह अच्छा होगा अगर dict.items वापस करने के लिए कुंजी की एक वैकल्पिक सूची स्वीकार कर लिया। यदि कोई कुंजियां दी गई हैं - डिफ़ॉल्ट व्यवहार का उपयोग करें - सभी आइटम प्राप्त करें।

class NewDict(dict): 

    def items(self, keys=()): 
     """Another version of dict.items() which accepts specific keys to use.""" 
     for key in keys or self.keys(): 
      yield key, self[key] 


a = NewDict({ 
    1: 'one', 
    2: 'two', 
    3: 'three', 
    4: 'four', 
    5: 'five' 
}) 

print(dict(a.items())) 
print(dict(a.items((1, 3, 5)))) 

[email protected]:~/Desktop$ python test.py 
{1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: 'five'} 
{1: 'one', 3: 'three', 5: 'five'} 

तो एक और dict का एक हिस्सा के साथ एक dict अद्यतन करने के लिए, आप का प्रयोग करेंगे:

dict1.update(dict2.items(['key1', 'key2', 'key3'])) 

उत्तर

5

कोई बिल्ट-इन समारोह मैं के बारे में पता नहीं है, लेकिन यह एक सरल 2-लाइनर होगा :

for key in ('key1', 'key2', 'key3'): 
    dict1 = dict2[key] 
+0

मैंने कुछ नया नहीं सीखा - वास्तव में कोई शॉर्टकट नहीं है ... मुझे यह जवाब पसंद है - यह अधिक स्पष्ट है। और मुझे लगता है कि यह एक्वाविटा के जवाब से तेज़ है, क्योंकि यह कोई मध्यस्थ सूची या जनरेटर नहीं बनाता है। – warvariuc

7

आप इसे इस तरह कर सकता है:

keys = ['key1', 'key2', 'key3'] 
dict1.update((k, dict2[k]) for k in keys) 
+0

मुझे लगता है कि यह dict1.update ({k: dict2 [k] कुंजी में कुंजी के लिए होना चाहिए}) (आप एक सूची के साथ नहीं, एक निर्देश के साथ अद्यतन करें) –

+0

@GuyAdini 2.7 में, आपका काम भी करता है। लेकिन पुराने संस्करणों में, यह अभी तक अस्तित्व में नहीं था। एक्वाविटा बिल्कुल सही है। – glglgl

+0

मेरा बुरा, तुम सही हो। –

0
dict1.update([(key, dict2[key]) for key in dict2.keys()]) 
+0

यह 'dict1.update (dict2)' – warvariuc

+0

जैसा ही है, कृपया यह बताएं कि यह क्या करता है, और इंडेंटेशन के चार रिक्त स्थान का उपयोग करें ताकि आपका कोड ठीक से स्वरूपित हो। – agf

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