Python 将包含元组的字典转换为字典
我用textfile制作了一本字典: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
{('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)),但我想这实际上是一个家庭作业问题。你不妨把确切的作业发出去。正如您从错误中所看到的,它正在寻找的键是一个字符串,即,如果我是对的,您需要将城市和州组合在一个字符串键中,用逗号分隔。这不是我要寻找的,但感谢您的好意,我将继续尝试,我可能会误解原始问题