python字典常用操作以及字典的嵌套_Python中的嵌套字典操作小结

本文最后更新于2019年6月29日,已超过 1 年没有更新,如果文章内容失效,还请反馈给我,谢谢!

Tips.1 遍历获取嵌套字典中的所有值

如果已知字典只有1、2层的话,还可以手动写个for循环,但是如果嵌套层数不确定的话,for循环就不靠谱了,需要使用“递归”的思想了。

def myprint(d):

for k, v in d.iteritems():

if isinstance(v, dict):

myprint(v)

else:

print "{0} : {1}".format(k, v)

还有就是利用Python的已有module来帮忙了:

import collections

def nested_dict_iter(nested):

for key, value in nested.iteritems():

if isinstance(value, collections.Mapping):

for inner_key, inner_value in nested_dict_iter(value):

yield inner_key, inner_value

else:

yield key, value

>>> list(nested_dict_iter({'a':{'b':{'c':1, 'd':2},

'e':{'f':3, 'g':4}},

'h':{'i':5, 'j':6}}))

[('c', 1), ('d', 2), ('g', 4), ('f', 3), ('i', 5), ('j', 6)]

Tips.2 Python中iteritems()和items()的区别

ea1dfcdec5b61bfa40e52ad7856ff1a1.png

总的来说:在Python 2.x中,items()返回的是实实在在的tuple列表,在某些情况下可能会耗费大量内存;但是iteritems()返回的是一个迭代器,在内存消耗上面可能会好点;不过:Using iteritems() while adding or deleting entries in the dictionary may raise a RuntimeError or fail to iterate over all entries.

而且在Python 3.x中,iteritems()被删除了,统一用改进过的items()处理相关问题。

Tips.3 在Python中创建嵌套字典的最佳方法

conn = {}

tup1 = (s_addr, source_port, d_addr, dest_port, acknowledgement)

if tup1 in conn:

if sequence in conn[tup1]:

conn[tup1][sequence].append(data)

else:

conn[tup1][sequence] = [data]

#conn[tup1] = {sequence:[data]} 这个是错误的方法,每次都是重新赋值!

else:

conn[tup1] = {sequence:[data]}

Tips.4 Python中嵌套字典内容的更新

将value设置成list类型,然后在碰到相同的key时,往list中append即可。

Tips.5 Python中[嵌套]字典的排序

方法就是:

sortedList = sorted(dic.items(), key=lambda d:d[1], reverse=True)

要注意的就是:

sorted()返回的是一个list,而不是dict。

参考链接:

在Python中list和dict的遍历稍有不同:

9d114bd92a13ace469a31ce0df9b425d.png

对于list来说,只需要简单的for循环即可;但是对于dict来说,需要指定items()或iteritems()才行,否则和自己预想的不太一样。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值