从Python上的嵌套字典中提取所有信息

从Python上的嵌套字典中提取所有信息,python,python-3.x,dictionary,Python,Python 3.x,Dictionary,我正在学习Python的嵌套字典。我想知道如何从嵌套字典中提取特定信息。 我的数据如下: 数据={ “1:{‘地区’:‘行政’,‘开支’:‘315’}, “2:{‘地区’:‘行政’,‘开支’:‘120’}, “3:{‘地区’:无,‘支出’:‘314’}, “4:{‘地区’:‘辅助设备和用具’,‘支出’:无}, “5:{‘地区’:‘艾滋病和器具’,‘支出’:‘12’}, “6:{‘地区’:‘行政’,‘开支’:‘110’}, “7:{‘地区’:‘行政’,‘开支’:‘300’}, } 如何提取每个领

我正在学习Python的嵌套字典。我想知道如何从嵌套字典中提取特定信息。 我的数据如下:

数据={
“1:{‘地区’:‘行政’,‘开支’:‘315’},
“2:{‘地区’:‘行政’,‘开支’:‘120’},
“3:{‘地区’:无,‘支出’:‘314’},
“4:{‘地区’:‘辅助设备和用具’,‘支出’:无},
“5:{‘地区’:‘艾滋病和器具’,‘支出’:‘12’},
“6:{‘地区’:‘行政’,‘开支’:‘110’},
“7:{‘地区’:‘行政’,‘开支’:‘300’},
}
如何提取每个领域的所有支出信息?
感谢您的帮助

要查找
支出的键的值

for findvals in data.values():
   for k, v in findvals.items():
      if k == "expenditure":
         print(v)

### this prints all the values for key equal to "expenditure"

要查找
支出的键的值

for findvals in data.values():
   for k, v in findvals.items():
      if k == "expenditure":
         print(v)

### this prints all the values for key equal to "expenditure"

使用
collections.defaultdict
。创建一个字典,其中区域作为键,支出作为列表中的值


从集合导入defaultdict
数据={
“1:{‘地区’:‘行政’,‘开支’:‘315’},
“2:{‘地区’:‘行政’,‘开支’:‘120’},
“3:{‘地区’:无,‘支出’:‘314’},
“4:{‘地区’:‘辅助设备和用具’,‘支出’:无},
“5:{‘地区’:‘艾滋病和器具’,‘支出’:‘12’},
“6:{‘地区’:‘行政’,‘开支’:‘110’},
“7:{‘地区’:‘行政’,‘开支’:‘300’}
}
存储=默认dict(列表)
#defaultdict允许动态定义关键点
{storage[d['area']]。如果d['area']}
#我们已将所有支出追加到所有并非没有支出的领域。
打印(存储)
#带着支出清单返回普通词典
结果=dict(存储)
打印(结果)
#结果:{‘管理’:['315'、'120'、'110'、'300']、'Aids and appliances':[无,'12']}
如果您不熟悉列表理解,可以使用普通for循环:

#我们可以重新编写:
{storage[d['area']]。如果d['area']}
#到
对于data.items()中的d:
如果d[‘区域’]:
存储[d['area']]。追加(d['Expense'])
#获取所有项目,如果区域不为False,则将其添加到存储中。

为了提高效率,我更喜欢第一个,但为了可读性,可以选择第二个。

使用
集合。defaultdict
。创建一个字典,其中区域作为键,支出作为列表中的值


从集合导入defaultdict
数据={
“1:{‘地区’:‘行政’,‘开支’:‘315’},
“2:{‘地区’:‘行政’,‘开支’:‘120’},
“3:{‘地区’:无,‘支出’:‘314’},
“4:{‘地区’:‘辅助设备和用具’,‘支出’:无},
“5:{‘地区’:‘艾滋病和器具’,‘支出’:‘12’},
“6:{‘地区’:‘行政’,‘开支’:‘110’},
“7:{‘地区’:‘行政’,‘开支’:‘300’}
}
存储=默认dict(列表)
#defaultdict允许动态定义关键点
{storage[d['area']]。如果d['area']}
#我们已将所有支出追加到所有并非没有支出的领域。
打印(存储)
#带着支出清单返回普通词典
结果=dict(存储)
打印(结果)
#结果:{‘管理’:['315'、'120'、'110'、'300']、'Aids and appliances':[无,'12']}
如果您不熟悉列表理解,可以使用普通for循环:

#我们可以重新编写:
{storage[d['area']]。如果d['area']}
#到
对于data.items()中的d:
如果d[‘区域’]:
存储[d['area']]。追加(d['Expense'])
#获取所有项目,如果区域不为False,则将其添加到存储中。
为了提高效率,我更喜欢第一种,但为了可读性,你可以选择第二种。

试试看

[val['expenditure'] for val in data.values() if val['area'] in ['Administration', 'Aids and appliances']]
试一试


你的字典写错了(没有注释和拼写错误!)

就这样做吧:

[[(v.get("area", None),y) for x,y in v.items() if x=='expenditure'] for k,v in data.items()] 

你的字典写错了(没有注释和拼写错误!)

就这样做吧:

[[(v.get("area", None),y) for x,y in v.items() if x=='expenditure'] for k,v in data.items()] 

我想您需要在
特定领域
的具体
支出
。如果您需要所有区域,则只需从我的代码中删除一个条件,否则您可以参考所有其他答案。 我根据用户输入的任何区域名称执行此操作,他将获得该特定
区域的
支出

def findExpense(数据):
a=输入(“输入区域以查找支出:”)
ex_dict={}
#将支出列表创建为EXU dict的值
例外情况[a]=[]
对于u,data.items()中的VAL:
如果VAL['area']==a:
ex_dict[a].附加(VAL[‘支出’]))
退票
打印(findExpense)({
“1:{‘地区’:‘行政’,‘开支’:‘315’},
“2:{‘地区’:‘行政’,‘开支’:‘120’},
“3:{‘地区’:无,‘支出’:‘314’},
“4:{‘地区’:‘辅助设备和用具’,‘支出’:无},
“5:{‘地区’:‘艾滋病和器具’,‘支出’:‘12’},
“6:{‘地区’:‘行政’,‘开支’:‘110’},
“7:{‘地区’:‘行政’,‘开支’:‘300’}
}))
如果您熟悉
列表理解
,则可以用以下代码替换
for
循环

ex_dict[a]=[VAL['Expense']表示数据项中的VAL,如果VAL['area']==a,则为()
退票

我想你需要在
特定领域
的具体
支出
。如果您需要所有区域,则只需从我的代码中删除一个条件,否则您可以参考所有其他答案。 我根据用户输入的任何区域名称执行此操作,他将获得该特定
区域的
支出

def findExpense(数据):
a=输入(“输入区域以查找支出:”)
ex_dict={}
#将支出列表创建为EXU dict的值
例外情况[a]=[]
对于u,data.items()中的VAL:
如果VAL['area']==a:
前