我在python中有一个列表的词典:
content = {88962: [80, 130], 87484: [64], 53662: [58,80]}
Run Code Online (Sandbox Code Playgroud)
我想把它变成一个唯一值的列表
[58,64,80,130]
Run Code Online (Sandbox Code Playgroud)
我写了一个手动解决方案,但这是一个手动解决方案.我知道有更简洁,更优雅的方式来做这个与列表理解,map/reduce,itertools等等任何人都有线索?
content = {88962: [80, 130], 87484: [64], 53662: [58,80]}
result = set({})
for k in content.keys() :
for i in content[k]:
result.add(i)
# and list/sort/print just to compare the output
r2 = list( result )
r2.sort()
print r2
Run Code Online (Sandbox Code Playgroud)
nne*_*neo 36
双重理解:
sorted({x for v in content.itervalues() for x in v})
Run Code Online (Sandbox Code Playgroud)
Jon*_*nts 11
from itertools import chain
sorted(set(chain(*content.values())))
# [58, 64, 80, 130]
# another option is `itertools.groupby`
from itertools import groupby
[k for k, g in groupby(sorted(chain(*content.values())))]
Run Code Online (Sandbox Code Playgroud)
或另一种选择是.values:
from itertools import chain
sorted(set(chain.from_iterable(content.itervalues())))
# [58, 64, 80, 130]
# another option is `itertools.groupby`
[k for k, g in groupby(sorted(chain.from_iterable(content.itervalues())))]
Run Code Online (Sandbox Code Playgroud)
使用set()和itertools.chain():
In [83]: content = {88962: [80, 130], 87484: [64], 53662: [58,80]}
In [84]: from itertools import chain
In [94]: x=set(chain(*content.values()))
In [95]: x
Out[95]: set([58, 64, 80, 130]) # a set, the items may or may not be sorted
In [96]: sorted(x) #convert set to a sorted list
Out[96]: [58, 64, 80, 130]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12804 次 |
| 最近记录: |