从字典值构建列表

时间:2021-01-31 09:48:37

标签: python list dictionary


我有一本字典,其中包含键值对,例如:
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 个列表。

3 个答案:

答案 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']
#}


相关问题