Jon*_* A. 3 python dictionary list set
我有两个清单:
pin_list = ['in0', 'in1', 'in2', 'y']
delvt_list = ['0.399', '0.1995', '0.1995', '0.399']
Run Code Online (Sandbox Code Playgroud)
我使用代码:temp = dict(zip(delvt_list,pin_list))但我得到以下内容:
temp = {'0.1995': 'in2', '0.399': 'y'}
Run Code Online (Sandbox Code Playgroud)
我需要编写什么python代码才能获得:
temp = {'0.1995': {'in2', 'in1'}, '0.399': {'y', 'in0'}}
Run Code Online (Sandbox Code Playgroud)
编辑:我没有做太多的python编码所以我不熟悉集合,可能需要out格式:
temp = {'0.1995': ['in2', 'in1'], '0.399': ['y', 'in0']}
Run Code Online (Sandbox Code Playgroud)
另外一个问题是,如果我想使用temp中的值来搜索我正在读取的行,那么使用集合或数组会更容易吗?
Mar*_*ers 12
temp = defaultdict(set)
for delvt, pin in zip(delvt_list, pin_list):
temp[delvt].add(pin)
Run Code Online (Sandbox Code Playgroud)
这将创建defaultdict默认值为集合的位置,然后循环并添加每个键的值.
如果您想要一个列表,只需更改默认类型以及如何添加值以匹配list接口:
temp = defaultdict(list)
for delvt, pin in zip(delvt_list, pin_list):
temp[delvt].append(pin)
Run Code Online (Sandbox Code Playgroud)
当你想测试membership(something in aset)时,集合是一个更好的主意; 这样的测试需要恒定的时间,而不是列表的线性时间(因此设置成员资格测试需要一个固定的时间,与集合的大小无关,而对于列表,它需要更多的时间,与列表中的元素数量成比例) .
你可以使用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']}
Run Code Online (Sandbox Code Playgroud)
或者如果你想要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'])}
Run Code Online (Sandbox Code Playgroud)
help()在dict.setdefault:
D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D
Run Code Online (Sandbox Code Playgroud)