Python字典中的重复值

时间:2015-11-25 21:32:48

标签: python list dictionary

我有以下格式的字典:

{ 'a' : [1], 'b' : [1,2,3], 'c' : [1,1,2], 'd' : [2,3,4] }

我想创建一个键值列表,其值为“1”。

所以我的结果列表应如下所示:

['a','b','c','c']

我无法理解如何使用重复值。 任何想法我怎么能得到这样的清单?

5 个答案:

答案 0 :(得分:5)

您可以使用列表推导

>>> d = { 'a' : [1], 'b' : [1,2,3], 'c' : [1,1,2], 'd' : [2,3,4] }
>>> [key for key, values in d.items() for element in values if element==1]
['c', 'c', 'b', 'a']

这里我们在列表理解中有两个嵌套的for循环。第一次迭代每个键,字典中的值对和第二个循环迭代“值”列表中的每个元素,并在每次该元素等于1时返回键。结果列表是无序的,因为dict是无序的,这意味着没有关于项目顺序的保证。

答案 1 :(得分:3)

这是一种方式:

>>> x = { 'a' : [1], 'b' : [1,2,3], 'c' : [1,1,2], 'd' : [2,3,4] }
>>> list(itertools.chain.from_iterable([k]*v.count(1) for k, v in x.iteritems() if 1 in v))
['a', 'c', 'c', 'b']

如果使用Python 3,请使用items代替iteritems

答案 2 :(得分:2)

这使用两个循环,k,v in d.items()从字典中获取每个(键,值)对,n in v循环遍历v中的每个值:

d = { 'a' : [1], 'b' : [1,2,3], 'c' : [1,1,2], 'd' : [2,3,4] }
l = []
for k,v in d.items():
    for n in v:
        if n == 1:
            l.append(k)
l.sort()

如果你想要一个单行:

l = sorted(k for k,v in d.items() for n in v if n == 1)

答案 3 :(得分:2)

简单方法:(Python 3)

d = { 'a' : [1], 'b' : [1,2,3], 'c' : [1,1,2], 'd' : [2,3,4] }  
n = 1
result = []
for key, value in d.items():
    for i in value.count(n):
        res.append(key)

如果您希望列表排序:

result.sort()

答案 4 :(得分:2)

必须在字典上进行排序才能获得预期结果。这应该有效:

list = []
for i in sorted(d.keys()):
   list+=[i for x in d[i] if x == 1]
print list

将输出:

 ['a', 'b', 'c', 'c']