我有一个dict
:
dictionary = {'1': 'a',
'2': 'a',
'3': 'b',
'4': 'b'}
我想拆分它,这样一个 dict
包含所有带有 value == 'a'
的项目,另一个包含所有带有 value == 'b'
的项目:
dict_a = {'1': 'a',
'2': 'a'}
dict_b = {'3': 'b',
'4': 'b'}
我怎样才能在短时间内做到这一点? 我的方法
dict_a = {}
dict_b = {}
for key, value in dictionary.items():
if value == 'a':
dict_a = dict(key, value)
else:
dict_b = dict(key, value)
不起作用。
答案 0 :(得分:4)
试试这个:
dict_a={}
dict_b={}
for key, value in dictionary.items():
if value == 'a':
dict_a[key] = value
else:
dict_b[key] = value
在您的原始代码中,您每次遍历循环时都在重新创建 dict_a
或 dict_b
。
如果您不确定您的起始 dict 仅包含 "a"
或 "b"
值,请改用:
dict_a={}
dict_b={}
for key, value in dictionary.items():
if value == 'a':
dict_a[key] = value
elif value == 'b':
dict_b[key] = value
else:
pass
答案 1 :(得分:2)
如果您想要更短的解决方案,您也可以使用 filter()
:
dict_a = dict(filter(lambda kv: kv[1] == 'a', dictionary.items()))
dict_b = dict(filter(lambda kv: kv[1] == 'b', dictionary.items()))
请注意,如果您必须多次执行此操作,这可能比手动 for
循环慢。
无论如何,如果您已经知道 dict_a
中的每个值都将是 "a"
而 dict_b
中的每个值都将是 "b"
似乎浪费空间,您根本不需要字典:
keys_a = []
keys_b = []
for key, value in dictionary.items():
if key == 'a':
keys_a.append(key)
else:
keys_b.append(key)
或使用filter()
:
keys_a = list(filter(lambda k: dictionary[k] == 'a', dictionary.keys()))
keys_b = list(filter(lambda k: dictionary[k] == 'b', dictionary.keys()))
答案 2 :(得分:0)
如果初始 dict
中的值不受您控制,或者不限于 a
和 b
,您可以尝试以下操作:
def combine_similar_values(input_dict):
output = {}
distinct_values = set()
for k, v in input_dict.items():
v_str = str(v)
if v_str in distinct_values:
output[v_str][k] = v
else:
distinct_values.add(v_str)
output[v_str] = {k: v}
return output.values()
combine_similar_values
将返回一个字典列表,其中每个 dict
包含相同的值。