python字典切片_python – 字典列表中的切片

参见英文答案 > Getting a list of specific index items from a list of dictionaries in python (list comprehension)                                    5个

是否有更快/更“pythonic”的方式来访问与字典列表中的单个键相关联的值而不是循环它(如图所示here)?我正在寻找类似listDict [:] [‘id’]的东西来获取valules列表,但我得到的错误列表索引必须是整数,而不是str,即使listDict [0] [‘id’]工作得很好.

更新 – 后续问题:

如果键的值也是一个列表本身并且我只对获取它的前10个元素感兴趣怎么办?

当使用列表理解时,很容易为listDict中的dic做[dic [‘id’] [:10]],但是当使用itemgetter时呢? map(itemgetter(‘id’)[:10],listDict)似乎不起作用.

我问一个快速的访问方式,因为我有一个庞大的字典列表,我认为我可以获得与numpy数组相同的行为(就像切片只是原始数组的视图一样)用于字典列表.我想知道python是否有任何方法可以利用我的列表中的所有字典都具有相同的大小,以便使用快速跨式内存访问和一次复制大块数据而无需将中间表示作为列表列表.

谢谢!

解决方法:

不,你不能在这里切片.您循环遍历整个列表并从每个字典中获取项目.

使用列表理解:

[dic['id'] for dic in listDict]

或operator.itemgetter:

>>> from operator import itemgetter

>>> map(itemgetter('id'), listDict)

时间比较:

>>> listDict = [{'id':1,'other':2},{'id':3,'other':4},{'id':5,'other':6}] *100

>>> %timeit [dic['id'] for dic in listDict]

10000 loops, best of 3: 50.8 us per loop

>>> %timeit map(itemgetter('id'), listDict)

10000 loops, best of 3: 42.7 us per loop

>>> listDict = [{'id':1,'other':2},{'id':3,'other':4},{'id':5,'other':6}]*1000

>>> %timeit [dic['id'] for dic in listDict]

1000 loops, best of 3: 446 us per loop

>>> %timeit map(itemgetter('id'), listDict)

1000 loops, best of 3: 440 us per loop

>>> listDict = [{'id':1,'other':2},{'id':3,'other':4},{'id':5,'other':6}] *10**5

>>> %timeit [dic['id'] for dic in listDict]

10 loops, best of 3: 50.7 ms per loop

>>> %timeit map(itemgetter('id'), listDict)

10 loops, best of 3: 45.6 ms per loop

标签:python,list,dictionary,slice

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值