【问题标题】:converting dictionary containing tuple to dictionary将包含元组的字典转换为字典
【发布时间】:2020-03-27 16:24:45
【问题描述】:

我从文本文件制作了一本字典:

{('Aaronsburg', 'PA'): ('40.9184', '-77.3786'), ('Abbeville', 'AL'): 
 ('31.5951', '-85.2108'), ('Abbeville', 'GA'): ('31.9890', '-83.3217'),
 ('Abbeville', 'LA'): ('29.9124', '-92.2110'), ('Abbeville', 'MS'): 
 ('34.4771', '-89.4450'), ('Abbeville', 'SC'): ('34.1621', '-82.4333')}

这些是来自原始文本文件的示例:

  Aaronsburg,PA,40.9184,-77.3786
  Abbeville,AL,31.5951,-85.2108

并希望将字典中的所有元组更改为这样的字典:

{{'Aaronsburg', 'PA'}: {'40.9184', '-77.3786'}, {'Abbeville', 'AL'}: 
 {'31.5951', '-85.2108'}, {'Abbeville', 'GA'}: {'31.9890', '-83.3217'}, 
 {'Abbeville', 'LA'}: {'29.9124', '-92.2110'}, {'Abbeville', 'MS'}: 
 {'34.4771', '-89.4450'}, {'Abbeville', 'SC'}: {'34.1621', '-82.4333'}}

但是,这样做时卡住了....

这是获取字典之前的原始代码

def coordinates(txt):
  d = []
  with open(txt) as f:
       for line in f:
           d.append(line.rstrip().split(','))
  new_dict = {}
  for sublist in d:
      new_dict[tuple(sublist[:2])] = tuple(sublist[2:])
  return((new_dict))

【问题讨论】:

  • 键需要不可变,字典是可变的。所以,在 Python 中是不可能的。
  • 那有没有其他方法可以将原始文本文件改为{{a, b}:{1,2},{c:d}:{3:4}}格式?
  • 而{'Aaronsburg', 'PA'} 被称为集合....{'Aaronsburg':'PA'} 被称为字典...您希望键是集合还是字典?价值观也是如此
  • 是的,所以我在 new_dict.items()) 中尝试了 new_d = dict(set(k), set(v)) for k, v,但是出现了错误
  • 我猜这实际上是作业问题。您也可以发布确切的任务。正如您从错误中看到的那样,它正在寻找的键是一个字符串,即如果我是对的,您需要将 City 和 state 组合在一个字符串键中,用逗号分隔。

标签: python python-3.x dictionary tuples


【解决方案1】:

字典键需要不可变。因此,您可以使用 frozenset 而不是 set 作为键,并使用 set 作为值。

{frozenset(k):set(v) for k,v  in my_dict.items()}

输出:

{frozenset({'Aaronsburg', 'PA'}): {'-77.3786', '40.9184'},
 frozenset({'AL', 'Abbeville'}): {'-85.2108', '31.5951'},
 frozenset({'Abbeville', 'GA'}): {'-83.3217', '31.9890'},
 frozenset({'Abbeville', 'LA'}): {'-92.2110', '29.9124'},
 frozenset({'Abbeville', 'MS'}): {'-89.4450', '34.4771'},
 frozenset({'Abbeville', 'SC'}): {'-82.4333', '34.1621'}}

【讨论】:

  • 这不是我要找的,但谢谢你的好意我会继续尝试,我可能会误解原来的问题
【解决方案2】:

我认为您尝试做的事情是不可能的,因为键不能来自可变类型。阅读python字典文档dictionary documentation:

字典由键索引,可以是任何不可变类型;字符串和数字总是可以作为键。如果元组只包含字符串、数字或元组,则可以将它们用作键;如果元组直接或间接包含任何可变对象,则不能将其用作键。您不能将列表用作键,因为可以使用索引分配、切片分配或 append() 和 extend() 等方法来修改列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    • 2011-04-03
    • 2020-09-21
    • 2021-07-23
    相关资源
    最近更新 更多