我有这本字典:

a = {'Jimmy': [['5', '7', '5'], ['S', 'F', 'R']], 
     'Limerick': [['8', '8', '5', '5', '8'], ['A', 'A', 'B', 'B', 'A']]}

我希望最终产品是一个包含元组的字典,但我认为第二个循环不起作用.

我想要的是:

a = {'Jimmy': (('5', '7', '5'), ('S', 'F', 'R')), 
     'Limerick': (('8', '8', '5', '5', '8'), ('A', 'A', 'B', 'B', 'A'))}

有人能帮我看看我做错了什么吗?

我试过:

a = {'Jimmy': [['5', '7', '5'], ['S', 'F', 'R']], 
     'Limerick': [['8', '8', '5', '5', '8'], ['A', 'A', 'B', 'B', 'A']]}

for key in a:
    a[key] = tuple(a[key])
    for value in a[key]:
        value = tuple(value)
        
print(a)

但没用.

推荐答案

语句value = tuple(value)将局部变量value重新分配给一个新的元组,但它根本不会更改a[key]的内容.

事实上,由于元组是不可变的,所以语句a[key] = tuple(a[key])可以防止a[key]的内容发生变化,除非重新分配a[key] = something_else.比如a[key] = tuple(a[key]),那么a[key][0] = "A"将失败,因为元组是不可变的.

其他答案给出了很好的简明解决方案,所以你可能想用这些答案,但这里有一个反映了你最初的try :

a = {'Jimmy': [['5', '7', '5'], ['S', 'F', 'R']], 
     'Limerick': [['8', '8', '5', '5', '8'], ['A', 'A', 'B', 'B', 'A']]}

for key in a:
    new_values = []
    for value in a[key]:
        new_values.append(tuple(value))
    a[key] = tuple(new_values)
        
print(a)

在这里,为了绕开元组是不可变的这一事实,可以创建一个列表[](它是可变的),在循环中构建它,然后将列表转换为元组,最后将该元组分配给a[key].

Python相关问答推荐

在Python中添加期货之间的延迟

为什么使用SciPy中的Distance. cos函数比直接执行其Python代码更快?

如何在Pygame中绘制右对齐的文本?

DuckDB将蜂巢分区插入拼花文件

LAB中的增强数组

将DF中的名称与另一DF拆分并匹配并返回匹配的公司

替换字符串中的多个重叠子字符串

ModuleNotFound错误:没有名为Crypto Windows 11、Python 3.11.6的模块

在Wayland上使用setCellWidget时,try 编辑QTable Widget中的单元格时,PyQt 6崩溃

数据抓取失败:寻求帮助

django禁止直接分配到多对多集合的前端.使用user.set()

如何在Python脚本中附加一个Google tab(已经打开)

如何在Raspberry Pi上检测USB并使用Python访问它?

如何在WSL2中更新Python到最新版本(3.12.2)?

SQLAlchemy Like ALL ORM analog

为什么NumPy的向量化计算在将向量存储为类属性时较慢?'

Python列表不会在条件while循环中正确随机化'

Flash只从html表单中获取一个值

如何创建引用列表并分配值的Systemrame列

为什么'if x is None:pass'比'x is None'单独使用更快?