我有以下格式的字典:
{ 'a' : [1], 'b' : [1,2,3], 'c' : [1,1,2], 'd' : [2,3,4] }
我想创建一个键值列表,其值为“1”。
所以我的结果列表应如下所示:
['a','b','c','c']
我无法理解如何使用重复值。 任何想法我怎么能得到这样的清单?
答案 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']