标签分类
技术文章
当前位置:主页 > 计算机编程 > python > python使用参数对嵌套字典进行取值的方法

python使用参数对嵌套字典进行取值的实例操作

  • 发布时间:
  • 作者:码农之家原创
  • 点击:91

python使用参数对嵌套字典进行取值的方法

这篇文章主要知识点是关于python,嵌套字典取值,python使用参数对嵌套字典进行取值的方法,python嵌套字典比较值,取值的实例详解 的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子书

Python和HDF5大数据应用
  • 类型:Python数据分析大小:13.8 MB格式:PDF出版:人民邮电出版社作者:科莱特
立即下载

更多相关的学习资源可以参阅 程序设计电子书Python电子书、等栏目。

因一些特殊需求需要以参数的形式获取字典中特定的值,网上搜了一下并没有特别好的实现(并没有太认真去找~),所以自己实现了一个,以供大家参考:) 。

话不多说,直接上代码:

 def dict_get(dic, locators, default=None):

 '''

 :param dic: 输入需要在其中取值的原始字典 <dict>
 :param locators: 输入取值定位器, 如:['result', 'msg', '-1', 'status'] <list>
 :param default: 进行取值中报错时所返回的默认值 (default: None)
 :return: 返回根据参数locators找出的值

 '''

 if not isinstance(dic, dict) or not isinstance(locators, list):
  return default

 value = None

 for locator in locators:
  if not type(value) in [dict, list] and isinstance(locator, str) and not can_convert_to_int(locator):
  try:
   value = dic[locator]
  except KeyError:
   return default
  continue
  if isinstance(value, dict):
  try:
   value = dict_get(value, [locator])
  except KeyError:
   return default
  continue
  if isinstance(value, list) and can_convert_to_int(locator):
  try:
   value = value[int(locator)]
  except IndexError:
   return default
  continue

 return value

 def can_convert_to_int(input):
 try:
  int(input)
  return True
 except BaseException:
  return False

Best Practice

好的我们来进行一次简单的最佳实践:)

if __name__ == '__main__':
 dict_test = {"result": {"code": "110002", "msg": [{'status': 'ok'}, {'status': 'failed'}]}}
 result = dict_get(dict_test, ['result', 'msg', '-1', 'status'])
 print(result)

下面是控制台的输出,大家可以看到输出是符合预期结果的:)

failed

Process finished with exit code 0

这次分享到此为止~ 我们有缘再见:)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持码农之家。

python嵌套字典比较值,取值的实例详解

#取值
import types
allGuests = {'Alice': {'apples': 5, 'pretzels': {'12':{'beijing':456}}},
             'Bob': {'ham sandwiches': 3, 'apple': 2},
             'Carol': {'cups': 3, 'apple pies': 1}}
def dictget(dict1,obj,default=None):
	for k,v in dict1.items():
		if k == obj:
			print(v)
		else:
			if type(v) is dict:
				re=dictget(v,obj)
				if re is not default:
					print(re)
dictget(allGuests,'beijing')

  结果:

python嵌套字典比较值,取值的实例详解

python嵌套字典比较值,取值的实例详解

比较大小

def bijiaodict(dict1,dict2):for k,v in dict1.items():for k2,v2 in dict2.items():if k==k2 and v==v2:print('dict1=dict2')else:print('dict1!=dict2')
dict1={'2':'6'}
dict2={2:{1:{1:8}}}
bijiaodict(dict1,dict2)

结果:

python嵌套字典比较值,取值的实例详解

以上就是python嵌套字典比较值,取值的实例详解的详细内容,更多请关注码农之家其它相关文章!

以上就是本次给大家分享的全部知识点内容总结,大家还可以在下方相关文章里找到详解vue axios封装请求状态、 vue项目中使用md5加密以及、 解决axios.interceptors.respon、 等python文章进一步学习,感谢大家的阅读和支持。

上一篇:解决nohup后台启动Python脚本后log不刷新的问题

下一篇:python map的实例用法讲解

展开 +

收起 -

学习笔记
网友NO.295062

Python推导式简单示例【列表推导式、字典推导式与集合推导式】

本文实例讲述了Python推导式。分享给大家供大家参考,具体如下: 1. 列表推导式 li = [1,2,3,4,5,6]# 求元素的平方 li_a = [x**2 for x in li ] li_a[1, 4, 9, 16, 25, 36]# 提取偶数值 li_b = [x for x in li if x%2==0] li_b[2, 4, 6]# 将多维数组转换成一维数组 li_c = [[1,2], [3], [], [4,5,6]] li_d = [j for i in li_c for j in i ] li_d[1, 2, 3, 4, 5, 6]# 使用map li_1 = ['a', 'b', 'c', 'd'] li_2 = [10, 20, 30, 40] li_e = list(map(lambda x, y:{x:y}, li_1, li_2)) li_e[{'a': 10}, {'b': 20}, {'c': 30}, {'d': 40}] 2. 字典推导式 # 解析列表 li = ['a', 'b', 'c', 'd', 'e'] li_1 = {k:v for k, v in enumerate(li)} li_1{0: 'a', 1: 'b', 2: 'c', 3: 'd', 4: 'e'}# 解析字典 dict_a = {'a':10, 'b':20, 'c':30} dict_b = {v:k for k, v in dict_a.items()} dict_b{10: 'a', 20: 'b', 30: 'c'} 3. 集合推导式 set1 = {x for x in range(10)} set1set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) PS:上述代码在Python2.7与Python3.6环境下测试 更多关于Python相关内容可查看本站专题:《Python列表(list)操作技巧总结》、《Python字符串操作技巧汇总》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》 希望本文所述对大家Python程序设计有所帮助。 ……

网友NO.735064

Python通过公共键对字典列表排序(利用itemgetter函数)

本篇文章给大家带来的内容是关于Python通过公共键对字典列表排序(利用itemgetter函数),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 1、需求 我们有一个字典列表,想根据一个或多个字典中的值对列表进行排序。 2、解决方案 利用operator模块中的itemgetter函数对这类结构进行排序是非常简单的。 实例: from operator import itemgetterrows=[{'name':'mark','age':18,'uid':'110'},{'name':'miaomiao','age':28,'uid':'150'},{'name':'miaomiao','age':8,'uid':'150'},{'name':'xiaohei','age':38,'uid':'130'},]rows_by_name=sorted(rows,key=itemgetter('name'))rows_by_uid=sorted(rows,key=itemgetter('uid'))print(rows_by_name)print(rows_by_uid)#itemgetter还支持多个键rows_by_name_age=sorted(rows,key=itemgetter('name','age'))print(rows_by_name_age)#itemgetter同样适用min、maxprint(min(rows,key=itemgetter('uid')))print(max(rows,key=itemgetter('age'))) 运行结果: [{'name': 'mark', 'age': 18, 'uid': '110'}, {'name': 'miaomiao', 'age': 28, 'uid': '150'}, {'name': 'miaomiao', 'age': 8, 'uid': '150'}, {'name': 'xiaohei', 'age': 38, 'uid': '130'}][{'name': 'mark', 'age': 18, 'uid': '110'}, {'name': 'xiaohei', 'age': 38, 'uid': '130'}, {'name': 'miaomiao', 'age': 28, 'uid': '150'}, {'name': 'miaomiao', 'age': 8, 'uid': '150'}][{'name': 'mark', 'age': 18, 'uid': '110'}, {'name': 'miaomiao', 'age': 8, 'uid': '150'}, {'name': 'miaomiao', 'age': 28, 'uid': '150'}, {'n……

网友NO.762145

python列表,字典,元组简单用法示例

本文实例讲述了python列表,字典,元组简单用法。分享给大家供大家参考,具体如下: 列表 #_*_ coding:utf-8 _*_# 列表,定义在方括号的形式中,可以进行切片操作。#它没有固定类型的约束,即可以包含不同的数据类型。L=[1,'abc',2.3]print len(L)print '*'*40L.append('mengtianwxs')print(L)print '*'*40L.pop(0)print(L)print '*'*40L.sort()print(L)L.reverse()print(L)print '*'*40#删除指定的项L.remove('abc')print(L) 这是输出的结果 3 **************************************** [1, 'abc', 2.3, 'mengtianwxs'] **************************************** ['abc', 2.3, 'mengtianwxs'] **************************************** [2.3, 'abc', 'mengtianwxs'] ['mengtianwxs', 'abc', 2.3] **************************************** ['mengtianwxs', 2.3] 字典不是序列,是映射。 #_*_ coding:utf-8 _*_dir={'a':'xiaojing','b':'xiaoli','c':'xiaolong'}#字典中要想按顺序输出必需对键先排序。KS=dir.keys()KS.sort()for key in KS: print dir[key], 这是输出结果: xiaojing xiaoli xiaolong #_*_ coding:utf-8 _*_dir={'a':'xiaojing','b':'xiaoli','c':'xiaolong'}#字典中要想按顺序输出必需对键先排序。KS=dir.keys()#KS.sort()#这是注释之后的输出结果,明显顺序不对for key in KS: print dir[key],#output xiaojing xiaolong xiaoli 元组 元组是定义在 ( ) 之间的对象。它是一个不可以改变的列表,是序列。 #_*_ coding:utf-8 _*_t=(1,2,3,4,5,6)print len(t)#获取元组中的第……

网友NO.114309

python如何让字典保持有序(代码)

本篇文章给大家带来的内容是关于python如何让字典保持有序(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 1、需求 我们想创建一个字典,同时当对字典做迭代或序列化操作时,也能控制其中元素的顺序。 2、解决方案 要控制字典中元素的顺序,可以使用collections模块中的OrderedDict类。当对字典做迭代时,它会严格按照元素初始添加的顺序进行。 from collections import OrderedDictd=OrderedDict()d['a']=1d['b']=2d['c']=3d['d']=4#根据插入删除输出for key in d:print(key,d[key]) 结果: a 1b 2c 3d 4 当想构建一个映射结构以便稍后对其做序列化或编码成另一种格式时,OrderedDict就显得特别有用。例如:如果想在进行JSON编码时精确控制各字段的顺序,那么只要首先在OrderedDict中构建数据就可以了: from collections import OrderedDictimport jsond=OrderedDict()d['a']=1d['b']=2d['c']=3d['d']=4j=json.dumps(d)print(j) 结果: {a: 1, b: 2, c: 3, d: 4} OrderedDict内部维护了一个双向链表,它会根据元素加入的顺序来排列键的位置。第一个新加入的元素被放置在链表的末尾,接下来对已存在的键做重新赋值,不会改变键的位置。 请注意:OrderedDict的大小是普通字典的2倍。这是由于它额外创建的链表所致。因此,如果打算构建一个涉及大量OrderedDict实例的数据结构(例如从……

<
1
>

Copyright 2018-2019 xz577.com 码农之家

版权责任说明