【问题标题】:How to convert dict values from list to tuple如何将字典值从列表转换为元组
【发布时间】:2017-09-20 18:03:18
【问题描述】:

我需要将我拥有的字典的值转换为列表中的元组。

我的代码如下:

import io

opened_infocsv = io.StringIO('''"ID","Name","Type 1","Type 2","Generation","Legendary"
720,"HoopaHoopa, Confined","Psychic","Ghost",6,"TRUE"
1,"Bulbasaur","Grass","Poison",1,"FALSE"
681,"Aegislash, (Blade Form)","Steel","Ghost",6,"FALSE"
413,"Wormadam, Plant","Bug","Grass",4,"FALSE"
643,"Reshiram","Dragon","Fire",5,"TRUE"
678,"Meowstic, Male","Psychic","",6,"FALSE"''')

def read_info_file(filename):
    idb = {} #Declares empty dict to be written to.
    #opened_infocsv = open(filename, 'r') #opens an argued .csv file witH INFO format.
    info_string = opened_infocsv.readlines()

    #opened_infocsv.close()
    for i in range(1,len(info_string)):
        splitline=info_string[i].replace("\n",'').replace('"','').split(',')
        for loc,i in enumerate(splitline):
            if i=="":
                splitline[loc]=None

        if len(splitline)==7:
            splitline[1]=splitline[1]+","+splitline.pop(2)
            splitline[0],splitline[4]=int(splitline[0]),int(splitline[4])
        if len(splitline)==6:
            splitline[0],splitline[4]=int(splitline[0]),int(splitline[4])
        if splitline[5] == "TRUE":
            splitline[5]= True
        else:
            splitline[5] = False

        idb[splitline.pop(1)] = splitline
    print(idb)

目前,我的输出是具有这种格式的字典:

{'HoopaHoopa, Confined': [720, 'Psychic', 'Ghost', 6, True]}

我只想将要转换为元组的值列表。

我尝试了tuple(idb.values()),但它似乎不起作用。

最后,我需要能够在最后一行 ("idb[splitline.pop(1)] = splitline") 之后添加解决方案,因为我需要能够在转换列表之前弹出列表

【问题讨论】:

  • tuple(list(idb.values())[0]) -> (720, 'Psychic', 'Ghost', 6, True)
  • 什么也没做
  • 假设{'HoopaHoopa, Confined': [720, 'Psychic', 'Ghost', 6, True]}为idb,再试一次tuple(list(idb.values())[0])
  • @jyotish 你在哪里添加代码?我在 idb[splitlines.pop... 下添加了它,它没有改变任何东西。
  • print(idb) 最终需要什么,是 {'HoopaHoopa, Confined': (720, 'Psychic', 'Ghost', 6, True)} 还是只是 (720, '通灵','幽灵',6,真)。

标签: python list dictionary for-loop tuples


【解决方案1】:

这是非常基本的,只需构建一个新字典,其中每个值都已转换为元组并重新绑定旧字典的名称。

这是一个简短的演示:

>>> d = {'a': [1, 2, 3], 'b': [4, 5, 6]}
>>> d = {key:tuple(lst) for key, lst in d.items()}
>>> d
{'a': (1, 2, 3), 'b': (4, 5, 6)}

我使用了字典理解。如果你对这些感到不舒服,下面的代码可以达到同样的效果。

>>> d = {'a': [1, 2, 3], 'b': [4, 5, 6]}
>>> new_d = {}
>>> for key, lst in d.items():
...     new_d[key] = tuple(lst)
... 
>>> d = new_d
>>> d
{'a': (1, 2, 3), 'b': (4, 5, 6)}

编辑:我刚刚意识到我的回答是部分的,因为您帖子的最后一行还有一个问题。我不太明白你在说什么,所以我暂时保留我的答案。

【讨论】:

  • 我尝试实施您的解决方案,但遇到语法错误。这有什么问题吗: new_idb = {} for key, 1st in idb.items(): new_idb[key] = tuple(1st) print(idb)
  • 你写的是tiple而不是tuple
  • @ruckarucka 1st 不是有效的变量名,因为它以数字开头。我的lst 以小L 开头。另外tiple 是一个错字,你需要tuple
  • 这是本网站的错字,代码已修复,但我仍然收到错误。是因为为 for 循环提供了两个参数吗?关键和第一?编辑:哦,我明白了。我将更正变量名称。谢谢!
猜你喜欢
  • 2011-09-29
  • 2010-10-15
  • 2019-04-17
  • 1970-01-01
  • 1970-01-01
  • 2013-04-01
  • 1970-01-01
相关资源
最近更新 更多