Python 将包含元组的字典转换为字典

Python 将包含元组的字典转换为字典,python,python-3.x,dictionary,tuples,Python,Python 3.x,Dictionary,Tuples,我用textfile制作了一本字典: {('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.44

我用textfile制作了一本字典:

{('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
要将dictionary中的所有元组更改为dictionary,如下所示:

{{'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))

字典键必须是不可变的。因此,您可以对键使用
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'}}

我认为您试图做的是不可能的,因为密钥不能来自可变类型。阅读python字典文档:

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


键需要是不可变的,字典是可变的。那么,在Python中是不可能的。那么有没有其他方法可以将原始文本文件更改为{{a,b}:{1,2},{c:d}:{3:4}格式?并且
{Aaronsburg',PA'}
称为集合…
{Aaronsburg':'PA'}
称为字典…您希望键是集合还是字典?值也是一样,所以我在new_dict.items()中尝试了k,v的new_d=dict(set(k),set(v)),但我想这实际上是一个家庭作业问题。你不妨把确切的作业发出去。正如您从错误中所看到的,它正在寻找的键是一个字符串,即,如果我是对的,您需要将城市和州组合在一个字符串键中,用逗号分隔。这不是我要寻找的,但感谢您的好意,我将继续尝试,我可能会误解原始问题