加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

学习Python并使用词典

发布时间:2020-12-20 11:12:23 所属栏目:Python 来源:网络整理
导读:我正在研究 Building Skills in Python的练习,据我所知,没有任何已发布的解决方案. 无论如何,在尝试删除重复项之前,我试图让字典计算原始列表中某个数字的出现次数.出于某种原因,尽管下面的主题有很多变化,我似乎无法增加字典中每个“键”的值. 我怎么能用字
我正在研究 Building Skills in Python的练习,据我所知,没有任何已发布的解决方案.

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

我怎么能用字典来编码呢?

dv = list()
# arbitrary sequence of numbers
seq = [2,4,5,2,6,3,8,9,7,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,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与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或成员资格检查这样的预防措施.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读