dictionary - 是否有可能在已知值之前将 namedtuple 的新实例推入字典?
问题描述
对我来说,第 9 行似乎出了问题。在这里,我希望将 TagsTable 的新副本推送到字典中。我知道一旦记录了命名元组字段,就无法更改它。但是,结果让我感到困惑,因为看起来值确实发生了变化 - 当此代码退出 mp3_tags 的所有条目时[三个字典键中的任何一个].date 设置为“1999_03_21”的最后日期
所以,两个问题:
有没有办法将新的 TagsTable 推送到字典中?
为什么代码不会失败并且不允许将第二个(甚至第三个)日期写入 TagsTable.date 字段(因为它似乎是对同一个 namedtuple 的引用)?我以为你不能写第二个值?
从集合导入命名元组 2 TagsTable = namedtuple('TagsTable',['title','date','subtitle','artist','summary','length','duration','pub_date']) 3 个 mp3 文件 = ['42-001.mp3','42-002.mp3','42-003.mp3'] 4 个日期 = ['1999_01_07', '1999_02_14', '1999_03_21'] 5 6 mp3_tags = {} 7 8 用于 mp3files 中的 mp3file: 9 mp3_tags[mp3file] = 标签表 10 11 for mp3file,date_string in zip(mp3files,dates): 12 mp3_tags[mp3file].date = date_string 13 14 用于 mp3files 中的 mp3file: 15 打印(mp3_tags[mp3file].date)
解决方案
看起来这是我正在寻找的修复:
from collections import namedtuple
mp3files = ['42-001.mp3','42-002.mp3','42-003.mp3']
dates = ['1999_01_07', '1999_02_14', '1999_03_21']
mp3_tags = {}
for mp3file in mp3files:
mp3_tags[mp3file] = namedtuple('TagsTable',['title','date','subtitle','artist','summary','length','duration','pub_date'])
for mp3file,date_string in zip(mp3files,dates):
mp3_tags[mp3file].date = date_string
for mp3file in mp3files:
print( mp3_tags[mp3file].date )
推荐阅读
- python - discord.py 中的广播命令
- python-3.x - ValueError:无法将字符串转换为浮点数:'6/29/2006'
- machine-learning - 梯度下降 (GD) 和随机梯度下降 (SGD) 的迭代次数
- asp.net-web-api - 使用 Web.API 表示海量数据的最佳方式是什么?
- c++ - <<< >>> vscode中的cuda
- html - 背景与更改元素 HTML
- string - Go 中的垃圾收集和指针的正确使用
- python - Rasa Core - 获取最新消息、自定义操作
- c# - 与签名匹配的代码中的方法列表(C# VS 使用 Roslyn 或扩展)
- java - Java AWT Robot 将鼠标点击放置在屏幕上完全随机的位置 [视频说明]