将此列表从stdin转换为字典

时间:2014-02-04 00:51:25

标签: python python-2.7

我是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中。

2 个答案:

答案 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)