将值附加到python字典的所有键

时间:2017-08-14 15:26:36

标签: 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 [' a']中的所有键。

随着我实际程序中字典的复杂性增加,我当前的工作示例变得不可读。所以我的动机主要是可读性。

2 个答案:

答案 0 :(得分: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])

答案 1 :(得分:1)

要使用 true 一行(即,不在一行中编写for循环),可以使用map并利用dicts的可变性:

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]但dict将会更新。但是,我建议最好使用明确的for循环作为双线:

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

请注意,这将为dict中的每个条目添加一个单独的值,因为这是我所解释的所需内容。