我有麻烦理解这一点。我有一本字典,其中的关键字是一个由两个字符串组成的元组。我想小写这个元组中的第一个字符串,这可能吗?当键是Python中的字典中的元组时
回答
由于元组是不可变的,所以您需要删除旧元件并创建一个新元件。这部作品在Python 2和3,并保持原来的字典:
>>> d = {('Foo', 0): 0, ('Bar', 0): 0}
>>> for (k, j), v in list(d.items()): # list key-value pairs for safe iteration
... del d[k,j] # remove the old key (and value)
... d[(k.lower(), j)] = v # set the new key-value pair
...
>>> d
{('foo', 0): 0, ('bar', 0): 0}
注意,在Python 2,dict.items()返回一个列表复制,所以它传递给列表是不必要的,但是我选择了让它与Python 3完全兼容。
您还可以使用发送到dict
的生成器语句,并让旧字典得到垃圾回收。这也是与Python 2.7,兼容2.6和3
>>> d = {('Foo', 0): 0, ('Bar', 0): 0}
>>> d = dict(((k.lower(), j), v) for (k, j), v in d.items())
>>> d
{('bar', 0): 0, ('foo', 0): 0}
Python 2说:“在字典中添加或删除条目时使用iteritems()可能会引发RuntimeError或无法迭代所有条目。” Python 3对'items()'表示同样的效果,“在字典中添加或删除条目时迭代视图可能会引发'RuntimeError'或无法迭代所有条目。” –
嗨,@SteveJessop,很好的接受,我测试了它,并且它在这种用例中工作正常,但我不想让人们误导其他用例,所以我按照您的建议按照安全的方向编辑它。 –
非常感谢你,这工作完美! – user2795095
在将字符串放入元组之前,您必须将字符串更改为小写字母。元组在创建后是只读的。
你可以随时创建一个代表你想要更改的新字典 –
Okei,谢谢你的回答。我正在导入一个来自元组的来自brown的word-tagg语料库,所以我没有看到在把它放到字典中之前我怎么能改变它... – user2795095
虽然,这与真的没有多大关系元组是不可变的 - 问题是* string *是不可变的。 (改变'tuple'中的对象工作得很好)。 – mgilson
不幸的是,你必须创建一个新的密钥。类似这样的:
>>> key, value = ('SPAM', 'eggs'), 'potato'
>>> d = {key: value}
>>> print d
{('SPAM', 'eggs'): 'potato'}
>>> new_key = (key[0].lower(),) + key[1:]
>>> d[new_key] = d.pop(key)
>>> print d
{('spam', 'eggs'): 'potato'}
您可以使用字典解析来建立一个新的字典与应用更改:
d = { (a.lower(), b) : v for (a,b), v in d.items() }
“修改”可能是错误的词。这是一个新的'dict'分配给原来的名字。如果本地名称是唯一的参考,那应该没问题。 –
@StevenRumbalski:通过“修改”这里我的意思是应用一个纯函数(因此旧值仍然保留)。同意它与突变的意义相冲突。你认为什么是更好的术语? –
我只是使用“新”。 –
- 1. 在python中使用元组作为字典中的字典键
- 2. Python中的元组键在字典中无法取得
- 3. 当键是一个元组时访问字典值
- 4. python中的字典键
- 5. Python 2中无法获得的键和值(字典和元组)
- 6. 将数组元素与Python中的字典键匹配
- 7. 在Python中使用元组作为字典键的缺点?
- 8. 字典与元组的Python
- 9. 保存字典的关键是元组与json,python
- 10. 从元组创建字典,用Python中的元组变量名作为键
- 11. Oneline Python中的字典数组字典
- 12. 比较字典键的元组元素
- 13. Python中的KeyError当从字典中删除一个键时,但存在键
- 14. 以元组为关键字的字典
- 15. Python中的数组/字典
- 16. 当值不是唯一的时,在python字典中转置值和键
- 17. Python字典麻烦:按元组中的元素分组
- 18. 在Python中使用元组作为字典键
- 19. 用Python中的字典中的字典键排序
- 20. 词典是一个字典中的关键Python
- 21. Python:当列表是元组中元素时的列表操作
- 22. 替换Python字典中的键的值?
- 23. 比较元组/字典python
- 24. 只选择元组的字典键?
- 25. 当其中一个元素是Python字典时,向MySQL表中插入一行
- 26. Python:从一个嵌套列表中的多个值的元组键的字典
- 27. Python的 - 由元组值顺序进行排序的元组键控字典
- 28. 字典中的键是Python中的整数对
- 29. 是Python中的Dict.get用来比较字典中的键吗?
- 30. django打印元组键键盘字典
一旦你创建的元组,你可以”不要改变它,所以你在创建元组之前先检查一下。 –
@ user2795095,是你想修复旧字典中的键的一个约束,因为你似乎暗示了这一点。 –