【问题标题】:Dictionary does not add new entries字典不添加新条目
【发布时间】:2020-05-04 01:09:26
【问题描述】:
从字符串元组,创建字典并添加索引(键)和字符串长度(值)的函数。
但是,for 循环只添加了某些条目(在本例中为索引 0 和 2)并且无法找出原因。
代码:
def check_horse_winner(tup):
results=dict()
for i in tup:
results[tup.index(i)]=len(i)
return results
print(check_horse_winner(("HORSE", "HORSE", "HORS", "HORSE")))
输出:
{0: 5, 2: 4}
【问题讨论】:
标签:
python
python-3.x
dictionary
for-loop
【解决方案1】:
字典是唯一键到值的映射
您在 dict 中推送相同的索引,此行会导致问题“tup.index(i)”,因为“HORSE”值它将获得“HORSE”的第一个索引。
尝试改变你的元组的值。
无论如何你可以检查https://www.pythonforbeginners.com/dictionary/how-to-use-dictionaries-in-python/
【解决方案2】:
index() 方法在元组中搜索给定元素并返回其位置。
但是,如果同一个元素多次出现,则返回第一个/最小的位置。
因此,在您的情况下, tup.index("HORSE") 每次都返回 0 作为其索引。由于您传递的元组中只有两个唯一元素,因此返回的dict只有2个键值对
【解决方案3】:
这个元组中有相同的元素。 index 返回第一个元素的索引 - 所以,你的程序会这样做:
- 开始第一次迭代 -
i 是 "HORSE",index 返回 0。
- 第二次迭代 -
i 再次为 "HORSE",index 将返回它的第一次出现,再次为 0。
这一路走来——除了"HORS"(我认为这只是一个错误)。
解决办法:
循环遍历索引而不是元组本身,如下所示:
for i in range(len(tup)):
results[i] = len(tup[i])
【解决方案4】:
tup中有重复值,.index()返回第一个。
听起来像你想要的
words = ("HORSE", "HORSE", "HORS", "HORSE")
index_to_length = {
i: len(w)
for (i, w)
in enumerate(words)
}
print(index_to_length)
【解决方案5】:
tup.index(i) 将始终为您提供元组中第一个条目的索引。
因为你有三次相同的元素,dict 不能接受重复的键,它正在替换相同的键
你可以这样做:
def check_horse_winner(tup):
results=dict()
for i,j in enumerate(tup):
results[i]=len(j)
return results
print(check_horse_winner(("HORSE", "HORSE", "HORS", "HORSE")))
替代方案:
print({j:len(i) for j,i in enumerate(("HORSE", "HORSE", "HORS", "HORSE"))})
【解决方案6】:
使用enumerate
例如:
def check_horse_winner(tup):
results=dict()
for i, v in enumerate(tup):
results[i]=len(v)
return results
print(check_horse_winner(("HORSE", "HORSE", "HORS", "HORSE")))
# --> {0: 5, 1: 5, 2: 4, 3: 5}