python dict嵌套dict_处理复杂嵌套dict结构的python方法

您可以使用PandasDataFrame对象(Pandas Dataframe Documentation),它可以以表格格式存储数据,类似于电子表格。在这种情况下,DataFrame应该有一列来表示嵌套数据中的每个键(一列表示国家,另一列表示状态,依此类推)。在

PandasDataFrames还可以根据每个列的记录(行)进行筛选、分组和其他有用的操作。假设您想过滤数据,只返回'2018-02-01'之后来自德克萨斯州的行(df是您的DataFrame)。这可以通过以下方式实现:

df[df['State'] == 'Texas' & df['Date'] > '2018-02-01']

要构建这些DataFrame对象,可以从格式化为记录集合的数据开始:data = [['USA', 'Texas', 'Austin', '2017-01-01', 169],

['USA', 'Texas', 'Austin', '2017-02-01', 231],

['USA', 'Texas', 'Houston', '2017-01-01', 265],

['USA', 'Texas', 'Houston', '2017-02-01', 310]]

然后像这样建造它们:

df = DataFrame(data, columns=['Country', 'State', 'City', 'Date', 'Value'])

如果DataFrame对象不是一个选项,并且您不想使用嵌套循环,则还可以使用带有嵌套谓词和筛选器的列表理解来访问内部数据:

^{pr2}$

但是,与嵌套循环相比,我看不出这种方法有多大区别,而且在代码可读性方面有一个缺点,imho。在

使用前面提到的记录集合方法(data),而不是嵌套结构,您可以使用以下方法筛选行:[r for r in data if r[2] == 'Houston']

为了提高可读性,可以使用namedtuple对象列表作为记录列表。你的数据应该是:from collections import namedtuple

record = namedtuple('Record', 'country state city date value')

data = [

record('USA', 'Texas', 'Austin', '2017-01-01', 169),

record('USA', 'Texas', 'Austin', '2017-02-01', 231),

record('USA', 'Texas', 'Houston', '2017-01-01', 265),

record('USA', 'Texas', 'Houston', '2017-02-01', 310)

]

你的过滤功能会得到改进,例如:

获取特定记录[r for r in data if r.city == 'Houston']

返回[

Record(country='USA', state='Texas', city='Houston', date='2017-01-01', value=265),

Record(country='USA', state='Texas', city='Houston', date='2017-02-01', value=310)

]

仅获取这些特定记录的值[r.value for r in data if r.city == 'Houston']

返回[265, 310]

考虑到namedtuple对象可以轻松地存储它们,最后一种方法也可以处理自定义对象实例。在

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值