Python 能实现这一的数据结构么

2017-09-04 10:28:35 +08:00
 hiboshi

初学 py 如果按照这样的写法话 $tmp[$v['id']][$v['t_id']] =$v['txt']; 多维数组会报 keyerrror 下面是 php 实现

$aa = array(
    array('id'=>1,'t_id'=>100,'txt'=>"aaa"),
    array('id'=>1,'t_id'=>110,'txt'=>"bbb"),
    array('id'=>1,'t_id'=>120,'txt'=>"ccc"),
    array('id'=>2,'t_id'=>130,'txt'=>"ddd"),
    array('id'=>2,'t_id'=>140,'txt'=>"eee"),
    array('id'=>3,'t_id'=>150,'txt'=>"fff"),
);

$tmp = array();
foreach ($aa as $k=>$v) {
    $tmp[$v['id']][$v['t_id']] =$v['txt'];
}
echo $tmp[1][100];
2437 次点击
所在节点    问与答
14 条回复
bravecarrot
2017-09-04 10:44:14 +08:00
pandas 里面的 dataframe
或者 collections.namedtuple
hiboshi
2017-09-04 10:51:49 +08:00
@bravecarrot six to fly
terry0314
2017-09-04 10:55:01 +08:00
d = [
{'id': 1, 't_id': 100, 'txt': 'aaa'},
{'id': 2, 't_id': 110, 'txt': 'bbb'},
]

tmp = {}
for i in d:
t = {}
t[i['t_id']] = i['txt']
tmp[i['id']] = t


这样?
nauynah
2017-09-04 10:55:49 +08:00
可以。

```Python
aa = [
{'id': 1, 't_id': 100, 'txt': 'aaa'},
{'id': 1, 't_id': 110, 'txt': 'bbb'},
{'id': 1, 't_id': 120, 'txt': 'ccc'},
{'id': 2, 't_id': 130, 'txt': 'ddd'},
{'id': 2, 't_id': 140, 'txt': 'eee'},
{'id': 3, 't_id': 150, 'txt': 'fff'},
]

# 1、dict.setdefault 方法
tmp = dict()
for a in aa:
tmp.setdefault(a['id'], {})
tmp[a['id']][a['t_id']] = a['txt']

# 2、collections 模块 defaultdict
from collections import defaultdict
tmp = defaultdict(dict)
for a in aa:
tmp[a['id']][a['t_id']] = a['txt']
```
Kilerd
2017-09-04 11:01:49 +08:00
你不是问过这个问题吗?
hiboshi
2017-09-04 11:08:21 +08:00
@terry0314
@nauynah
各位大神,我没看 py 就开始写。不知道还有这个模块
hiboshi
2017-09-04 11:08:31 +08:00
@Kilerd 上次是一个累加的问题
jedihy
2017-09-04 11:59:59 +08:00
不应该会 keyError 呀,这就是一个 array of dictionaries
hiboshi
2017-09-04 12:01:23 +08:00
@nauynah 如果是三维数组呢
hiboshi
2017-09-04 12:03:22 +08:00
@jedihy dict 中如果引用的 key 不存在会抛出 keyerror
Trim21
2017-09-04 12:21:00 +08:00
defaultdict ( list )
didikee
2017-09-04 12:48:30 +08:00
看到这头像还以为是我自己发的😂
nauynah
2017-09-04 13:06:34 +08:00
@hiboshi 三维也是一样的
```
tmp = dict()
tmp.setdefault(key1, {})
tmp[key1].setdefault(key2, {})
tmp[key1][key2][key3] = value
```
hiboshi
2017-09-04 14:42:43 +08:00
@nauynah 好的 感谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/387953

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX