リストが 3 つある場合の最も簡単な方法
list [1,2,3] [a,b,c] [5,6,7]
辞書でマップする
{1:{'a':5}, 2:{'b':6}, 3:{'c':7}}
zipを使用する必要があると感じました..
辞書の理解が不可能なPythonでこれを行うにはどうすればよいですか
リストが 3 つある場合の最も簡単な方法
list [1,2,3] [a,b,c] [5,6,7]
辞書でマップする
{1:{'a':5}, 2:{'b':6}, 3:{'c':7}}
zipを使用する必要があると感じました..
辞書の理解が不可能なPythonでこれを行うにはどうすればよいですか
更新の 3 リストのケースは、次のような簡単なものzip
です。
d = {k:{k1:v1} for k,k1,v1 in zip(list1,list2,list3)}
辞書には順序がないため、ソートされたキーの順序に基づいて辞書をマップすることを想定しています。次の方法でそれを行うことができます。
>>> lst = [1, 2, 3]
>>> dct = {'a': 5, 'b': 6, 'c': 7}
>>> {i: {k: dct[k]} for i, k in zip(lst, sorted(dct))}
{1: {'a': 5}, 2: {'b': 6}, 3: {'c': 7}}
順序を維持するために、辞書の代わりにタプルのリストのようなものを使用することにした場合は、次のようにすることができます。
>>> lst = [1, 2, 3]
>>> tups = [('a', 5), ('b', 6), ('c', 7)]
>>> {i: {k: v} for i, (k, v) in zip(lst, tups)}
{1: {'a': 5}, 2: {'b': 6}, 3: {'c': 7}}
効率の面で優れているizipを使用する
from itertools import izip
a = [1, 2, 3]
b = ['a', 'b', 'c']
c = [5, 6, 7]
print {a: {b: c} for a, b, c in izip(a, b, c)}
出力:
{1: {'a': 5}, 2: {'b': 6}, 3: {'c': 7}}
最初と 2 番目のリストの値は複製できますか。たとえば、次のようになります。
a, b, c = [3,1,2,3,1], ['a','a','b','c','d'], [1,5,6,7,8]
注文が必要な場合:
from collections import OrderedDict
od = OrderedDict()
for x, y, z in zip(a, b, c):
if x not in od:
od[x] = OrderedDict()
od[x][y] = z
print od
出力:
OrderedDict([(3, OrderedDict([('a', 1), ('c', 7)])), (1, OrderedDict([('a', 5), ('d', 8)])), (2, OrderedDict([('b', 6)]))])
注文が必要ない場合:
from collections import defaultdict
dd = defaultdict(dict)
for x, y, z in zip(a,b,c):
dd[x][y] = z
print dd
出力:
defaultdict(<type 'dict'>, {1: {'a': 5, 'd': 8}, 2: {'b': 6}, 3: {'a': 1, 'c': 7}})