在pythondict

问题描述 投票:0回答:4

我将如何获得以下列表?

result_list = [{"one": [1, 2, 3], "two": [2, 3, 4]}, {"one": [1, 2, 3], "three": [3, 4, 5]}, {"two": [2, 3, 4], "three": [3, 4, 5]}]

其他词,我希望在不替换的情况下,在一个dict中的两个键/价值对的所有组合,无论订单如何。

一种解决方案是使用

itertools.combinations()

python list dictionary combinations
4个回答
21
投票

result_list = map(dict, itertools.combinations( combination_dict.iteritems(), 2))

topopulardemand
,这里是python 3.x版本:

result_list = list(map(dict, itertools.combinations(
    combination_dict.items(), 2)))

我更喜欢@JollyJumper的解决方案,尽管该解决方案的可读性更快

>>> from itertools import combinations
>>> d = {"one": [1, 2, 3], "two": [2, 3, 4], "three": [3, 4, 5]}
>>> [{j: d[j] for j in i} for i in combinations(d, 2)]
[{'three': [3, 4, 5], 'two': [2, 3, 4]}, {'three': [3, 4, 5], 'one': [1, 2, 3]}, {'two': [2, 3, 4], 'one': [1, 2, 3]}]
timimings:

1
投票
>python -m timeit -s "d = {'three': [3, 4, 5], 'two': [2, 3, 4], 'one': [1, 2, 3]}; from itertools import combinations" "map(dict, combinations(d.iteritems(), 2))" 100000 loops, best of 3: 3.27 usec per loop >python -m timeit -s "d = {'three': [3, 4, 5], 'two': [2, 3, 4], 'one': [1, 2, 3]}; from itertools import combinations" "[{j: d[j] for j in i} for i in combinations(d, 2)]" 1000000 loops, best of 3: 1.92 usec per loop

from itertools import combinations
combination_dict = {"one": [1, 2, 3], "two": [2, 3, 4], "three": [3, 4, 5]}
lis=[]
for i in range(1,len(combination_dict)):
    for x in combinations(combination_dict,i):
        dic={z:combination_dict[z] for z in x}
        lis.append(dic)
print lis            

输出:

0
投票
[{'three': [3, 4, 5]}, {'two': [2, 3, 4]}, {'one': [1, 2, 3]}, {'three': [3, 4, 5], 'two': [2, 3, 4]}, {'three': [3, 4, 5], 'one': [1, 2, 3]}, {'two': [2, 3, 4], 'one': [1, 2, 3]}]
    

我相信这将为您带来您的需求。 result list = [{combination_dict['one','two'],combination_dict['one','three']}]

我发现本教程非常有帮助:

-2
投票
http://bdhacker.wordpress.com/2010/02/27/python-tutorial-dictionaries-key-value-pair-maps-basics/


最新问题
© www.soinside.com 2019 - 2025. All rights reserved.