Pythonのリスト内包表記構文が好きです。
辞書の作成にも使用できますか?たとえば、キーと値のペアを反復処理することにより、次のようになります。
mydict = {(k,v) for (k,v) in blah blah blah} # doesn't work
Pythonのリスト内包表記構文が好きです。
辞書の作成にも使用できますか?たとえば、キーと値のペアを反復処理することにより、次のようになります。
mydict = {(k,v) for (k,v) in blah blah blah} # doesn't work
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))
Python 3 および Python 2.7+ では、辞書内包表記は次のようになります。
d = {k:v for k, v in iterable}
Python 2.6 以前については、fortran の回答を参照してください。
実際、すでにある種のマッピングを理解している場合は、 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}
Python 2.7 では、次のようになります。
>>> list1, list2 = ['a', 'b', 'c'], [1,2,3]
>>> dict( zip( list1, list2))
{'a': 1, 'c': 3, 'b': 2}
それらを圧縮してください!
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])
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)}
これを試して、
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'}
@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}