gpt4 book ai didi

python - 学习 Python 和使用字典

转载 作者:太空宇宙 更新时间:2023-11-03 13:24:42 26 4
gpt4 key购买 nike

我正在完成 Building Skills in Python 中的练习,据我所知没有任何已发布的解决方案。

无论如何,在删除重复项之前,我试图让字典计算原始列表中某个数字的出现次数。出于某种原因,尽管下面的主题有很多变化,但我似乎无法增加字典中每个“键”的值。

我如何用字典编写代码?

dv = list()
# arbitrary sequence of numbers
seq = [2,4,5,2,4,6,3,8,9,3,7,2,47,2]

# dictionary counting number of occurances
seqDic = { }

for v in seq:
i = 1
dv.append(v)
for i in range(len(dv)-1):
if dv[i] == v:
del dv[-1]
seqDic.setdefault(v)
currentCount = seqDic[v]
currentCount += 1
print currentCount # debug
seqDic[v]=currentCount
print "orig:", seq
print "new: ", dv
print seqDic

最佳答案

defaultdict 不是 dict(它是一个子类,可能会为您做太多工作以帮助您通过本练习学习),所以这里有一个简单的方法用普通的 dict 来做到这一点:

dv = list()
# arbitrary sequence of numbers
seq = [2,4,5,2,4,6,3,8,9,3,7,2,47,2]

# dictionary counting number of occurances
seqDic = { }

for i in seq:
if i in seqDic:
seqDic[i] += 1
else:
dv.append(i)
seqDic[i] = 1

这种简单的方法在这里特别有效,因为您无论如何都需要 if i in seqDic 测试来构建 dv 以及 seqDic。否则,更简单的是:

for i in seq:
seqDic[i] = 1 + seqDic.get(i, 0)

使用 dict 的便捷方法 get,如果第一个参数不是字典中的键,则返回第二个参数。如果您喜欢这个想法,这里有一个构建dv的解决方案:

for i in seq:
seqDic[i] = 1 + seqDic.get(i, 0)
if seqDic[i] == 1: dv.append(i)

编辑:如果您不考虑 dv 中项目的顺序(而不是希望 dv 的顺序相同作为 item 在 seq 中的第一次出现),然后只使用(在循环的简单版本之后)

dv = seqDic.keys()

也有效(在 Python 2 中,.keys 返回一个列表),也是如此

dv = list(seqDic)

这在 Python 2 Python 3 中都很好。在相同的假设下(你不关心 dv 中项目的顺序)也有其他好的解决方案,例如

seqDic = dict.fromkeys(seq, 0)
for i in seq: seqDic[i] += 1
dv = list(seqDic)

这里,我们首先使用字典的fromkeys类方法来构建一个新的dict,其中已经有0作为每个键对应的值,这样我们就可以在没有 .get 或成员检查等预防措施的情况下递增每个条目。

关于python - 学习 Python 和使用字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1993689/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com