带有文件的Python字典

时间:2015-02-25 19:35:29

标签: python

我有一个.txt文件,其中包含如下所示的文本行:

  

Godbals NO LO -1 -1 1 1 1 -1 -1 1 1 1 1 1 1 1 -1 1 1 1 -1 1 1 1 1 1 -1   1 -1 -1 1 1 1 1 1 1 0 0 1 -1 -1 1 -1 1 -1 1 1 -1

我的任务是定义一个返回字典的过程,该字典的键是文本行的第一个元素,即'Godbals',值是-1,1,0的系列。

我已通过open方法导入此文件并将其分配给变量strlist

这是我写过的一段代码;

def create_voting_dict(strlist):
    D = {} 
    splitlist = [k.split() for  k in strlist]
    for i in range(len(strlist)):
        intlist = [int(j) for j in splitlist[i][3:]]
        D.update({splitlist[i][0]:None })
        for p in intlist:
            D[splitlist[i][0]] = p
    return D

这将返回此词典;

{'Cornyn': 1, 'McConnell': 1, 'Bingaman': -1, 'Talent': 1, 'Cochran': 1, 'Craig': -1, 'Lugar': 1, 'Clinton': 1, 'Domenici': 1, 'Rockefeller': -1, 'Gregg': 1, 'Lautenberg': -1, 'Chambliss': 1, 'Voinovich': -1, 'Murkowski': 1, 'Levin': -1, 'Pryor': 1, 'Martinez': 1, 'Harkin': -1, 'Johnson': 1, 'Bayh': -1, 'Byrd': -1, 'Coburn': 1, 'Bunning': 1, 'Reid': -1, 'Kennedy': -1, 'Shelby': 0, 'Sarbanes': -1, 'Bond': 1, 'Nelson1': 1, 'Dole': 1, 'Coleman': 1, 'Dorgan': -1, 'Durbin': -1, 'Reed': -1, 'Landrieu': 1, 'Schumer': 1, 'Santorum': 1, 'Snowe': 1, 'Lieberman': -1, 'Hutchison': 1, 'Lincoln': 1, 'DeMint': 1, 'Isakson': 1, 'Inhofe': 1, 'Dodd': -1, 'DeWine': 1, 'Frist': 1, 'Bennett': 1, 'Smith': 1, 'Thomas': 1, 'Enzi': 1, 'Thune': 1, 'Burr': -1, 'Boxer': -1, 'Allen': 1, 'Nelson2': 1, 'Kerry': -1, 'Murray': -1, 'Burns': 1, 'Allard': 1, 'Salazar': 1, 'Jeffords': -1, 'Akaka': -1, 'Sununu': 1, 'Biden': -1, 'Obama': -1, 'Cantwell': 1, 'Roberts': 1, 'Alexander': 1, 'McCain': 1, 'Collins': 1, 'Inouye': -1, 'Lott': 0, 'Feingold': -1, 'Kyl': 1, 'Feinstein': 1, 'Kohl': -1, 'Specter': 1, 'Stevens': 1, 'Ensign': 1, 'Carper': 1, 'Hatch': 1, 'Vitter': 1, 'Baucus': 1, 'Graham': 1, 'Grassley': 1, 'Wyden': -1, 'Hagel': 1, 'Dayton': 1, 'Mikulski': -1, 'Stabenow': 1, 'Leahy': -1, 'Sessions': 1, 'Crapo': 1, 'Conrad': -1, 'Warner': 1, 'Chafee': -1, 'Brownback': 1}

我看到我的代码是如何有缺陷的,我想找到一种方法来迭代地将-1,0,1附加到字典元素的值......或类似的东西。

2 个答案:

答案 0 :(得分:1)

您可以使用maxsplit 3 split字符串,然后使用set

>>> s="Godbals NO LO -1 -1 1 1 1 -1 -1 1 1 1 1 1 1 1 -1 1 1 1 -1 1 1 1 1 1 -1 1 -1 -1 1 1 1 1 1 1 0 0 1 -1 -1 1 -1 1 -1 1 1 -1"
>>> l=s.split(' ',3)
>>> d={l[0]:set(l[-1].split())}
>>> d
{'Godbals': set(['1', '0', '-1'])}

答案 1 :(得分:0)

您可以开始用空格分割字符串

split_line = line.split(" ")

然后,开始索引它。据我所知,你的关键是,

key = split_line[0]
value = split_line[3:]
final_dict = {key : value}

希望有所帮助