V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
hiboshi
V2EX  ›  问与答

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

  •  
  •   hiboshi · 2017-09-04 10:28:35 +08:00 · 2246 次点击
    这是一个创建于 2423 天前的主题,其中的信息可能已经有所发展或是发生改变。

    初学 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];
    
    14 条回复    2017-09-04 14:42:43 +08:00
    bravecarrot
        1
    bravecarrot  
       2017-09-04 10:44:14 +08:00 via iPhone   ❤️ 1
    pandas 里面的 dataframe
    或者 collections.namedtuple
    hiboshi
        2
    hiboshi  
    OP
       2017-09-04 10:51:49 +08:00
    @bravecarrot six to fly
    terry0314
        3
    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
        4
    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
        5
    Kilerd  
       2017-09-04 11:01:49 +08:00 via iPhone
    你不是问过这个问题吗?
    hiboshi
        6
    hiboshi  
    OP
       2017-09-04 11:08:21 +08:00
    @terry0314
    @nauynah
    各位大神,我没看 py 就开始写。不知道还有这个模块
    hiboshi
        7
    hiboshi  
    OP
       2017-09-04 11:08:31 +08:00
    @Kilerd 上次是一个累加的问题
    jedihy
        8
    jedihy  
       2017-09-04 11:59:59 +08:00
    不应该会 keyError 呀,这就是一个 array of dictionaries
    hiboshi
        9
    hiboshi  
    OP
       2017-09-04 12:01:23 +08:00
    @nauynah 如果是三维数组呢
    hiboshi
        10
    hiboshi  
    OP
       2017-09-04 12:03:22 +08:00
    @jedihy dict 中如果引用的 key 不存在会抛出 keyerror
    Trim21
        11
    Trim21  
       2017-09-04 12:21:00 +08:00 via Android
    defaultdict ( list )
    didikee
        12
    didikee  
       2017-09-04 12:48:30 +08:00 via Android
    看到这头像还以为是我自己发的😂
    nauynah
        13
    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
        14
    hiboshi  
    OP
       2017-09-04 14:42:43 +08:00
    @nauynah 好的 感谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1567 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 17:03 · PVG 01:03 · LAX 10:03 · JFK 13:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.