8

これはばかげた質問かもしれませんが、次の口述を考えると:

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

このリストをどのように達成しますか:

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 内の 2 つのキーと値のペアのすべての組み合わせを置換せずに使用したいということです。

4

4 に答える 4

20

1 つの解決策は、次を使用することitertools.combinations()です。

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

編集:人気の高い需要のため、ここでは Python 3.x バージョン:

result_list = list(map(dict, itertools.combinations(
    combination_dict.items(), 2)))
于 2012-08-10T16:21:28.877 に答える
1

読みやすさのために@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]}]

タイミング:

>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
于 2012-08-10T16:24:22.700 に答える
0
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            

出力:

[{'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]}]
于 2012-08-10T16:27:09.107 に答える
-2

これにより、必要なものが得られると思います。

result list = [{combination_dict['one','two'],combination_dict['one','three']}]

このチュートリアルが非常に役立つことがわかりました。

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

于 2012-08-10T16:29:38.010 に答える