dict = {'a11': 1, 'a21': 0, 'a12': 1, 'a14': 2, 'a41': 1 . . . . . .. . 'a67':99, 'a23':98, 'a19':99}
所有的键值都是a11、a12、a13等形式,取值范围为0~99。
现在从字典中,我想建立这样的列表:
列表 lst0 具有值为 0 的键,
lst1 的键值为 1,依此类推..
lst 99 有值为 99 的键。
当值小于 5 时,我可以使用以下代码实现相同的效果:
for key,value in d.items():
if value==1:
lst.append(key)
但是当我们有更多不同的值时如何实现结果,比如 100 个或更多并且不必明确定义所有 100 个列表。
答案 0 :(得分:0)
您可以使用 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']
答案 1 :(得分:0)
试试这个:
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)
答案 2 :(得分:0)
# 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']
#}