4

私は2つのリストを持っています:

pin_list = ['in0', 'in1', 'in2', 'y']
delvt_list = ['0.399', '0.1995', '0.1995', '0.399']

私はコードを使用します: temp = dict(zip(delvt_list,pin_list))しかし、私は次のようになります:

temp = {'0.1995': 'in2', '0.399': 'y'}

取得するには、どの Python コードを作成する必要がありますか。

temp =  {'0.1995': {'in2', 'in1'}, '0.399': {'y', 'in0'}}

また

temp =  {'0.1995': ['in2', 'in1'], '0.399': ['y', 'in0']}

追加の質問として、値を使用してtemp読み取り中の行を検索したい場合、セットまたはリストの方が簡単ですか?

4

2 に答える 2

13

使用collections.defaultdict:

temp = defaultdict(set)

for delvt, pin in zip(delvt_list, pin_list):
    temp[delvt].add(pin)

これによりdefaultdict、デフォルト値がセットである が作成され、ループして各キーの値が追加されます。

代わりにリストが必要な場合は、デフォルトのタイプと値の追加方法をlistインターフェースに合わせて変更するだけです。

temp = defaultdict(list)

for delvt, pin in zip(delvt_list, pin_list):
    temp[delvt].append(pin)

メンバーシップ ( something in aset) をテストする場合は、セットを使用することをお勧めします。このようなテストは、リストの線形時間に対して一定の時間を要します (したがって、セット メンバーシップ テストは、セットのサイズに関係なく一定の時間がかかりますが、リストの場合は、リスト内の要素の数に比例してより多くの時間がかかります) .

于 2013-01-14T21:43:42.427 に答える
5

あなたが使用することができますdict.setdefault():

In [20]: pin_list = ['in0', 'in1', 'in2', 'y']

In [21]: delvt_list = ['0.399', '0.1995', '0.1995', '0.399']

In [22]: dic={}

In [23]: for x,y in zip(pin_list,delvt_list):
    dic.setdefault(y,[]).append(x)
   ....:     

In [24]: dic
Out[24]: {'0.1995': ['in1', 'in2'], '0.399': ['in0', 'y']}

setまたは、ベースの出力が必要な場合:

In [29]: dic={}

In [30]: for x,y in zip(pin_list,delvt_list):
    dic.setdefault(y,set()).add(x)
   ....:     

In [31]: dic
Out[31]: {'0.1995': set(['in1', 'in2']), '0.399': set(['y', 'in0'])}

help()オンdict.setdefault:

D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D
于 2013-01-14T21:45:54.340 に答える