我是Python新手,需要帮助将列表“lis”转换为字典“dic”。该列表是通过从stdin读取行来生成的,如下所示 -
lis = sys.stdin.readlines()
['San Jose\t200.82\n', 'California\t115.15\n', 'San Jose\t20.20\n', 'Texas\t300.10\n', 'San Jose\t100.50\n']
我已完成以下操作,将列表中的项目转换为键值,但不知道如何将其存储在字典中。
for item in lis:
k,v1 = item.split('\t')
v = float(v1)
print k,v
我想将其存储在字典中,如下所示
{'San Jose':200.82, 'California':115.15 .....etc}
你能告诉我如何有效地做到这一点吗?稍后我想将这本词典加载到Pandas DataFrame中。
答案 0 :(得分:1)
这应该有效 -
dic = {}
for k,v in [e.strip().split("\t") for e in lis]:
dic[k] = v
#{'San Jose': '100.50', 'California': '115.15', 'Texas': '300.10'}
或者更简洁 -
dic = {k:v for k,v in [e.strip().split("\t") for e in lis]}
如果您不想覆盖以前的值 -
dic = {}
for k,v in [e.strip().split("\t") for e in lis]:
if k not in dic:
dic[k] = v
如果您想为同一个密钥设置多个值。
dic = {}
for k,v in [e.strip().split("\t") for e in lis]:
if k not in dic:
dic[k] = [v]
else:
dic[k].append(v)
'''
Output of the Dictionary.
{
'San Jose': ['200.82', '20.20', '100.50'],
'California': ['115.15'],
'Texas': ['300.10']
}
'''
答案 1 :(得分:1)
你快到了:
dic = {}
for item in lis:
k,v1 = item.split('\t')
v = float(v1)
print k,v
dic[k] = v
当然,您可以通过理解来简化:
dic = {item.split('\t')[0]:float(item.split('\t')[1]) for item in lis}
您似乎希望与每个键关联的多个值。为此,请使用defaultdict:
from collections import defaultdict
dic = defaultdict(list)
for item in lis:
k,v1 = item.split('\t')
v = float(v1)
print k,v
dic[k].append(v)
当然,你可以自己做一个沉重的事情:
dic = {}
for item in lis:
k,v1 = item.split('\t')
v = float(v1)
print k,v
if k not in dic:
dic[k] = []
dic[k].append(v)