我有一个字典,其中有键值对:
我有一个字典,其中有键值对:
dict = {'a11': 1, 'a21': 0, 'a12': 1, 'a14': 2, 'a41': 1 . . . . . .. . 'a67':99, 'a23':98, 'a19':99}
键值均为a11、a12、a13等形式,取值范围为0 ~ 99。
现在从字典中,我想建立这样的列表:
list lst0的键值为0,
lst1的键值为1,以此类推。
当值小于5时,我可以使用下面的代码实现相同的效果:
for key,value in d.items():
if value==1:
lst.append(key)
但是当我们有更多不同的值时,比如100或更多,并且不需要显式定义所有100个列表,如何实现结果。
您可以使用defaultdict
。
from collections import defaultdict
container_dict = defaultdict(list)
for key, value in my_dict.items():
container_dict[value].append(key)
结果是这样的,你可以用你想要的整数作为键来访问它:
>>> container_dict
defaultdict(<class 'list'>, {1: ['a11', 'a12', 'a41'], 0: ['a21'], 2: ['a14'], 99: ['a67', 'a19'], 98: ['a23']})
>>> container_dict[1]
['a11', 'a12', 'a41']
试试这个:
dct = {'a11': 1, 'a21': 0, 'a12': 1, 'a14': 2, 'a41': 1 , 'a67':99, 'a23':98, 'a19':99}
lists_of_keys = [[k for k,v in dct.items() if v == val] for val in set(dct.values())]
print(lists_of_keys)
# Assume
mydict = {'a11': 1, 'a21': 0, 'a12': 1, 'a14': 2, 'a41': 1, 'a67':99, 'a23':99}
# unique values are:
uniques = list(set(mydict.values()))
# uniques = [1,0,2,99]
# for each unique value filter the keys those have that unique value.
result = {f'lst{m}':[y[0] for y in filter(lambda x:x[1]==m, dict.items())] for m in uniques}
# {
# 'lst0': ['a21'],
# 'lst1': ['a11', 'a12'],
# 'lst2': ['a14', 'a41'],
# 'lst99': ['a67', 'a23']
#}