2014-05-18 9 views
16

मैं एक मूल पायथन प्रोग्रामर हूं इसलिए उम्मीद है कि मेरे प्रश्न का उत्तर आसान होगा। मैं एक शब्दकोश लेने और इसे एक सूची में जोड़ने की कोशिश कर रहा हूं। शब्दकोश फिर मूल्य बदलता है और फिर एक लूप में फिर से जोड़ा जाता है। ऐसा लगता है कि हर बार जब मैं ऐसा करता हूं, तो सूची में मौजूद सभी शब्द उनके मूल्यों को उस व्यक्ति से मेल खाने के लिए बदलते हैं जो अभी जोड़ा गया था। उदाहरण के लिए:एक लूप में एक सूची में एक शब्दकोश जोड़ना पायथन

>>> dict = {} 
>>> list = [] 
>>> for x in range(0,100): 
...  dict[1] = x 
...  list.append(dict) 
... 
>>> print list 

मैं परिणाम ग्रहण करेंगे [{1:1}, {1:2}, {1:3}... {1:98}, {1:99}] होगा लेकिन इसके बजाय मुझे मिल गया:

[{1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}] 

किसी भी मदद की बहुत सराहना कर रहा है।

yourlist.append(yourdict.copy()) 

मैं yourdict और dict और list के बजाय yourlist इस्तेमाल किया;:

+1

आप 'भरने होते हैं, उन्हें' dict' के लिए संदर्भ (जो आप नहीं बुलाना चाहिए 'dict') – jonrsharpe

उत्तर

32

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

+2

इसके अलावा साथ list' (जो आप का नाम नहीं चाहिए' list'): 'yourlist'! – jonrsharpe

+0

आह, हाँ, सही किया गया। –

2

आप zip का भी उपयोग कर सकते हैं और आपको जो चाहिए उसे करने के लिए समझ की सूची।

आप dict मूल्यों एक का उपयोग range(1,100)

l = [dict(zip([1],[x])) for x in range(1,100)] 
4

पर शुरू करने के लिए जब आप लूप के बाहर adict शब्दकोश बनाने चाहते हैं, तो आप अपने alist सूची में एक ही dict जोड़कर कर रहे हैं। इसका मतलब है कि सभी प्रतियां एक ही शब्दकोश को इंगित करती हैं और आपको हर बार अंतिम मूल्य {1:99} मिल रहा है। बस लूप के अंदर हर शब्दकोष बनाएं और अब आपके 100 अलग-अलग शब्दकोश हैं।

alist = [] 
for x in range(100): 
    adict = {1:x} 
    alist.append(adict) 
print(alist) 
1

बस लूप के अंदर dict = {} डालें।

>>> dict = {} 
>>> list = [] 
>>> for x in range(0, 100): 
     dict[1] = x 
     list.append(dict) 
     dict = {} 

>>> print list 
संबंधित मुद्दे