1459

Pythonのリスト内包表記構文が好きです。

辞書の作成にも使用できますか?たとえば、キーと値のペアを反復処理することにより、次のようになります。

mydict = {(k,v) for (k,v) in blah blah blah}  # doesn't work
4

17 に答える 17

2179

dict内包表記を使用する(Python 2.7以降):

{key: value for (key, value) in iterable}

または、より単純なケースまたは以前のバージョンのPythonの場合は、dictコンストラクターを使用します。例:

pairs = [('a', 1), ('b', 2)]
dict(pairs)                         #=> {'a': 1, 'b': 2}
dict([(k, v+1) for k, v in pairs])  #=> {'a': 2, 'b': 3}

キーと値の個別の配列が与えられた場合、dictコンストラクターを次のように使用しzipます。

keys = ['a', 'b']
values = [1, 2]
dict(zip(keys, values))  #=> {'a': 1, 'b': 2}
2) "zip'ped" from two separate iterables of keys/vals
dict(zip(list_of_keys, list_of_values))
于 2009-11-17T10:09:32.787 に答える
262

Python 3 および Python 2.7+ では、辞書内包表記は次のようになります。

d = {k:v for k, v in iterable}

Python 2.6 以前については、fortran の回答を参照してください。

于 2009-11-17T10:22:45.967 に答える
68

実際、すでにある種のマッピングを理解している場合は、 iterable を反復処理する必要さえありません。

>>> ts = [(1, 2), (3, 4), (5, 6)]
>>> dict(ts)
{1: 2, 3: 4, 5: 6}
>>> gen = ((i, i+1) for i in range(1, 6, 2))
>>> gen
<generator object <genexpr> at 0xb7201c5c>
>>> dict(gen)
{1: 2, 3: 4, 5: 6}
于 2013-05-31T17:48:45.767 に答える
43

Python 2.7 では、次のようになります。

>>> list1, list2 = ['a', 'b', 'c'], [1,2,3]
>>> dict( zip( list1, list2))
{'a': 1, 'c': 3, 'b': 2}

それらを圧縮してください

于 2015-10-08T02:59:01.027 に答える
29

Python バージョン >= 2.7 の場合、以下を実行します。

d = {i: True for i in [1,2,3]}

Python バージョン < 2.7 (RIP、2010 年 7 月 3 日 - 2019 年 12 月 31 日)の場合、以下を実行します。

d = dict((i,True) for i in [1,2,3])
于 2015-06-26T09:05:46.813 に答える
25

key_listキーのリストと値のリストを反復処理する場合は、@ fortranの回答に追加しますvalue_list

d = dict((key, value) for (key, value) in zip(key_list, value_list))

また

d = {(key, value) for (key, value) in zip(key_list, value_list)}
于 2016-01-15T00:23:57.123 に答える
5

これを試して、

def get_dic_from_two_lists(keys, values):
    return { keys[i] : values[i] for i in range(len(keys)) }

首都の 2 つのリストがあるとします。

country = ['India', 'Pakistan', 'China']
capital = ['New Delhi', 'Islamabad', 'Beijing']

次に、2 つのリストから辞書を作成します。

print get_dic_from_two_lists(country, capital)

出来上がりはこんな感じで、

{'Pakistan': 'Islamabad', 'China': 'Beijing', 'India': 'New Delhi'}
于 2016-02-03T14:15:14.613 に答える
1

@Ekhtiar answerdictに追加して、から検索したい場合はlist、これを使用できます。

names = ['a', 'b', 'd', 'f', 'c']
names_to_id = {v:k for k, v in enumerate(names)}
# {'a': 0, 'b': 1, 'c': 2, 'd': 3, 'f': 4}

または、まれに重複をフィルタリングしたい場合は、set最初に使用します(番号のリストで最高):

names = ['a', 'b', 'd', 'f', 'd', 'c']
sorted_list = list(set(names))
sorted_list.sort()
names_to_id = {v:k for k, v in enumerate(sorted_list)}
# {'a': 0, 'b': 1, 'c': 2, 'd': 3, 'f': 4}

names = [1,2,5,5,6,2,1]
names_to_id = {v:k for k, v in enumerate(set(names))}
# {1: 0, 2: 1, 5: 2, 6: 3}
于 2021-12-15T20:07:41.327 に答える