我有一个列表,其值与字典的键相同.我想写一个代码,它对字典的值做了一些事情(比如将它们增加一个),就像它们的键出现在列表中一样多次.
所以,例如
listy=['dgdg','thth','zuh','zuh','thth','dgdg']
dicty = {'dgdg':1, 'thth':2, 'zuh':5}
Run Code Online (Sandbox Code Playgroud)
我试过这段代码:
def functy (listx,dictx):
for i in range (0, len(listx)):
for k,v in dictx:
if listx[i]==k:
v=v+1
else:
pass
functy(listy, dicty)
Run Code Online (Sandbox Code Playgroud)
但它引发了这个错误:
Traceback (most recent call last):
File "C:\Python34\8.py", line 12, in <module>
functy(listy, dicty)
File "C:\Python34\8.py", line 6, in functy
for k,v in dictx:
ValueError: too many values to unpack (expected 2)
Run Code Online (Sandbox Code Playgroud)
你能告诉我它为什么不起作用以及我怎么做到的?
dict.__iter__默认情况下会参考dict.keys().
因为你想要key它和它的价值
for k,v in dictx.items():
Run Code Online (Sandbox Code Playgroud)
这将产生一个元组列表:
>>> a={1:2,2:3,3:4}
>>> a.items()
[(1, 2), (2, 3), (3, 4)]
Run Code Online (Sandbox Code Playgroud)
iteritems 也可用,但来自生成器而不是列表的收益:
>>> a.iteritems()
<dictionary-itemiterator object at 0x00000000030115E8>
Run Code Online (Sandbox Code Playgroud)
但是,您应该考虑通过密钥直接建立索引,否则您的任务v=v+1将不会持久保存到dict:
def functy (listx,dictx):
for item in listx:
if item in dictx:
dictx[item]+=1
>>> listy=['dgdg','thth','zuh','zuh','thth','dgdg']
>>> dicty = {'dgdg':1, 'thth':2, 'zuh':5}
>>> print dicty
{'thth': 2, 'zuh': 5, 'dgdg': 1}
>>> functy(listy, dicty)
>>> print dicty
{'thth': 4, 'zuh': 7, 'dgdg': 3}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
70 次 |
| 最近记录: |