Python字典按值为列表的键排序

3
我有一个字典列表,每个字典键的值都是一个列表。
[{'mike':[500,1000,1500,2750,3000]},{'john':[750,1250,2000]},{'luke':[600,1100]}]

列表中字典的数量将会变化。
我该如何获得以下输出, 每个字典的值按升序排列。
500:mike
600:luke
750:john
1000:mike
1100:luke
1250:john
1500:mike
2000:john
2750:mike
3000:mike
4个回答

2

一句话总结:

result = sorted(((item, key) for d in x for (key, value) in d.items() for item in value), key=lambda x: x[0])

for elem in result:
    print ({elem[0]}:{elem[0]}.format(elem=elem)

多行文本:

x = [{"mike":[500,1000,1500,2750,3000]},{"john":[750,1250,2000]},{"luke":[600,1100]}]
result = []
for item in x:
    for key, value in item.iteritems():
        for v in value:
            result.append((v, key))
result.sort(key=lambda x: x[0])
for elem in result:
    print ({elem[0]}:{elem[0]}.format(elem=elem)

# outputs
500:mike
600:luke
750:john
1000:mike
1100:luke
1250:john
1500:mike
2000:john
2750:mike
3000:mike

1
使用列表推导式将字典列表扁平化为元组列表(value, key),使用sorted按值排序,使用str.join格式化输出。
list_dicts = [  {'mike':[500,1000,1500,2750,3000]},
                {'john':[750,1250,2000]},
                {'luke':[600,1100]}]

# flat the list of dicts as a list of tuples (value, key), sort them
result = sorted([(item, k) for d in list_dicts for k, l in d.items() for item in l])

# format output
print('\n'.join([':'.join([str(i) for i in t]) for t in result]))
# Output
500:mike
600:luke
750:john
1000:mike
1100:luke
1250:john
1500:mike
2000:john
2750:mike
3000:mike

1
你使用itertools来解决这个问题:
from itertools import product, chain

LL = list(chain(*[list(product(i.keys(), i.values()[0])) for i in L]))
sorted(LL, key=lambda x: x[1])

Out[152]:
[('mike', 500),
 ('luke', 600),
 ('john', 750),
 ('mike', 1000),
 ('luke', 1100),
 ('john', 1250),
 ('mike', 1500),
 ('john', 2000),
 ('mike', 2750),
 ('mike', 3000)]

Python 3.5.1: TypeError: 'dict_values' object does not support indexing. 这里是指 i.values()[0] 部分。 - MaxU - stand with Ukraine

0
a,b=[],[]
for i in g:
    for k in i.values()[0]:
        a.append(k)
        b.append(i.keys())

print sorted(zip(a,b))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接