2017-08-14 105 views
1

的所有鍵我有以下解釋:追加值,以Python字典

dic={'a': {'aa': [], 'ab': [], 'ac': []}, 'b': {'ba': [], 'bb': [], 'bc': []}} 

我要追加三個值無論是在「A」或「B」的所有密鑰。 下面的示例:

dic['a']['aa'].append(value_a) 
dic['a']['ab'].append(value_b) 
dic['a']['ac'].append(value_c) 

任何方式,我可以在一個單行做到這一點。 我正在尋找的東西像下面這樣:

dic['a'][*] = [value_a, value_b, value_c] 

其中*是通配符索引在DIC [「一」]所有的鑰匙。

由於在我的實際程序中字典的複雜性增長,我目前的工作示例變得不可讀。所以我的動機主要是可讀性。

+0

您是專門尋找「單線」解決方案還是做「雙線」循環? – Miket25

回答

1

要使用真正一行代碼(即,不是寫在一行中for循環),可以使用map和利用類型的字典的易變性:

dic={'a': {'aa': [], 'ab': [], 'ac': []}, 'b': {'ba': [], 'bb': [], 'bc': []}} 
vals = [1,2,3] 
key = 'a' 

map(lambda kv: dic[key][kv[0]].append(kv[1]), zip(dic[key], vals)) 

這將返回[None, None, None]但字典將被更新。不過,我認爲這將是更好的使用顯式for迴路,爲兩班輪:

for k, v in zip(dic[key], vals): 
    dic[key][k].append(v) 

注意,這將一個單獨的值添加到每個在字典中的條目,因爲這是我的理解是什麼是想要的。

+0

我的附加值是分開的,這是正確的。 – Martin

+0

@Martin那麼,我的解決方案能解決您的問題嗎? – JohanL

+0

for循環肯定比分配每行的每個值更可讀。不過,我仍然覺得可能有更具描述性的做法。 – Martin

3

如果您的單線解決方案可接受循環,則可以使用此循環。

for key in dic['a']: dic['a'][key].append(value) 

如果你有值的列表,你可以extend列表。

for key in dic['a']: dic['a'][key].extend([value_a, value_b, value_c])