python定义多维字典

在python中默认的dict方法定义多维字典较为复杂

并不能直接通过

a=dict()
a[‘b‘][‘c‘][‘d‘] = 1
>>> a[‘b‘][‘c‘][‘d‘]=1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: ‘b‘

如果想要创建多维字典,需要这样做

>>> a={}
>>>
>>> a[‘b‘] = {}
>>> a[‘b‘][‘c‘]={}
>>> a[‘b‘][‘c‘][‘d‘] = 1
>>> a
{‘b‘: {‘c‘: {‘d‘: 1}}}

比较繁琐

比较推荐的创建多维字典的方法有4种:

第一种

from collections import defaultdict

def site_struct():
    return defaultdict(board_struct)

def board_struct():
    return defaultdict(user_struct)

def user_struct():
    return dict(pageviews=0,username=‘‘,comments=0)

userdict = defaultdict(site_struct)

userdict[‘site‘][‘board‘][‘username‘] =  1
userdict[‘par‘][‘chl‘][‘username‘] = ‘ceshi‘

print userdict[‘site‘][‘board‘][‘username‘]
print userdict[‘par‘][‘chl‘][‘username‘]

利用collections模块defaultdict方法的特性,利用外部函数来实现

第二种

userdict = {}
userdict[(‘site1‘, ‘board1‘, ‘username‘)] = ‘tommy‘

利用元组来充当多维字典的key,即将多维key按照规则放入元组中,使用该元组作为字典的key并赋值,以达到多维key的效果

第三种

from collections import defaultdict
from collections import Counter

def multi_dimensions(n, type): 
  if n<=1:
    return type()
  return defaultdict(lambda:multi_dimensions(n-1, type))

m = multi_dimensions(5, Counter)
m[‘d1‘][‘d2‘][‘d3‘][‘d4‘] = 1
>>> m
defaultdict(<function <lambda> at 0x322c70>, {‘d1‘: defaultdict(<function <lambda> at 0x322870>, {‘d2‘: defaultdict(<function <lambda> at 0x322cf0>, {‘d3‘: defaultdict(<function <lambda> at 0x322d30>, {‘d4‘: 1})})})})

这种方法更像是一个迭代器,迭代创建

第四种

from collections import defaultdict

def nesteddict(): 
  return defaultdict(nesteddict)
  
>>> c[‘key1‘][‘key2‘][‘key3‘] = 10
>>> c
defaultdict(<function nesteddict at 0x322cf0>, {‘key1‘: defaultdict(<function nesteddict at 0x322cf0>, {‘key2‘: defaultdict(<function nesteddict at 0x322cf0>, {‘key3‘: 10})})})

这种方法从根本上讲,就是一个迭代器

时间: 2024-08-08 09:53:43

python定义多维字典的相关文章

在python中定义二维数组

发表于 http://liamchzh.0fees.net/?p=234&i=1 一次偶然的机会,发现python中list非常有意思. 先看一段代码 [py]array = [0, 0, 0]matrix = [array*3]print matrix## [[0,0,0,0,0,0,0,0,0]][/py] 这段代码其实没有新建一个二维数组 再看一段代码 [py]array = [0, 0, 0]matrix = [array] * 3print matrix## [[0, 0, 0], [

Python 中的多维字典

Python中的dict可以实现迅速查找.那么有没有像数组有二维数组一样,有二维的字典呢?比如我需要对两个关键词进行查找的时候.2D dict 可以通过 dict_2d = {'a': {'a': 1, 'b': 3}, 'b': {'a': 6}} 来建立,并通过 dict_2d['a']['b'] 来访问.但是添加一个新的 “key-value”对却比较复杂.对一维字典,可以用 dict_1d = dict() dict_1d['a'] = 1 或者 dict_1d.update({'a':

python之请求报文对比(假定最多二维字典)

两段请求报文,判断不一样的key和value,只判断d2里和d1不同的值,和全部不同的key ok_req={ "version": "9.0.0", "is_test": True, "store": "", "urs": "", "device": { "os": "android", "ime

Python解析CSV中的多维字典

CSV文件结构如下,其中字段A为唯一 代码如下,Python27 1 with open(file_obj+'TEST.CSV','r') as f: 2 #转为字典 3 Reader=csv.DictReader(f) 4 #转为列表,列表中多维字典 5 csvlist1 = list(Reader) 6 #将A当做为索引 7 csvlist2 = [row['A'] for row in csvlist1] 8 #根据A的值找到下标值 9 n = csvlist2.index(A VALUE

Python自动化运维课程学习--Day3

本文为参加老男孩Python自动化运维课程第三天学习内容的总结. 大致内容如下: 1.文件操作 2.字符编码转码相关操作 3.函数 0.关于本文中所有运行Python代码的环境: --操作系统:Ubuntu 16.10 (Linux 4.8.0) --Python版本:3.5.2 python2.7.12 --Python IDE: PyCharm 2016.3.2 一.文件操作: 1.文件操作流程:以只读.写(覆盖写).追加写.读写.追加读写.二进制读写等模式打开文件 ==> 得到文件句柄,并

Python自动化运维课程学习--Day2

本文为参加老男孩Python自动化运维课程第二天学习内容的总结. 大致内容如下: 1.python模块初识 2.python程序运行流程 3.python数据类型(只讲了numbers, bool, strings, bytes, list, tuple, dict, set) 4.python数据运算 0.关于本文中所有运行Python代码的环境: --操作系统:Ubuntu 16.10 (Linux 4.8.0) --Python版本:3.5.2 --Python IDE: PyCharm

Python开发运维之路day3

一.python字典操作 1.字典的定义 字典一种key-value的数据类型,类似于json串. 2.字典的特性 key:value 字典不可变,key唯一 key的定义规则: 1.不可变,数字.字符串.字典.元组(定义符合(),与列表完全一致,唯一不同的是元组内元素不可变) 2.key必须是唯一的,所以字典天生有去重功能 value的定义规则: 1.任意数据类型 3.字典的使用方法 字典的增.删.改.查 1 查询: 2 print(dic['name']) 3 print(dic.get('

python自动化运维之集中病毒扫描

1.因为我linux的python是2.6.6,所以因为有些模块是2.7的,先进行升级. 步骤地址:http://www.linuxidc.com/Linux/2014-07/104555.htm 2.安装pyclamd yum install -y clamav clamd clamav-update 安装clamavp的相关程序包 chkconfig --level 235 clamd on /usr/bin/freshclam pyClamd-0.3.15.tar.gz安装包安装 3.vi

老男孩python高级运维开发课程

L老男孩培训-python培训二期lesson01(11节)01-第一天内容介绍及课前思想02-python介绍及发展03-python 发展04-python安装05-python编程风格06-raw_input用户交互07-用户交互及格式化输出08-python流程控制if_for_while09-python练习程序_员工信息表10-python练习程序_员工信息表_基本实现11-员工信息表_脚本bug处理 L老男孩培训-python培训二期lesson02(9节)01-学生作业讲解展示0