Exi*_*xie 3 python ordereddictionary
所以,我有一个有序的字典,它有一堆键/值对。我可以使用 items() 方法提取所有它们。但是如果我只想选择其中的一些呢?
>>> import collections
>>> d = collections.OrderedDict({'banana': 3, 'apple': 4, 'pear': 1,'orange': 2})
>>> d.items()
[('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)]
Run Code Online (Sandbox Code Playgroud)
如果我只想要苹果和香蕉怎么办?
有没有办法可以指定我想要的键?
>>> d['apple','banana'] <-- does not work
Run Code Online (Sandbox Code Playgroud)
我正在考虑在最后使用列表理解来过滤结果,但看起来很混乱,我希望有更好的方法。
你可以定义一个单线来做到这一点:
>>> import collections
>>> d = collections.OrderedDict({'banana': 3, 'apple': 4, 'pear': 1,'orange': 2})
>>> d.items()
[('orange', 2), ('pear', 1), ('banana', 3), ('apple', 4)]
>>>
>>> subset = lambda d, *keys: [(key, d[key]) for key in keys]
>>> subset(d, 'apple', 'banana')
[('apple', 4), ('banana', 3)]
Run Code Online (Sandbox Code Playgroud)
作为奖励,它也适用于常规dict对象。
更新
要以与 相同的顺序获得结果列表OrderedDict,正如@Maxim Veksler 似乎认为您可能想要的那样,必须以给定特定顺序的方式定义有序字典。在 3.6 之前的 Python 版本中,必须执行以下操作,而不是您的问题:
d = collections.OrderedDict([('banana', 3), ('apple', 4), ('pear', 1), ('orange', 2)])
Run Code Online (Sandbox Code Playgroud)
list它将一个参数传递给构造函数而不是一个常规的dict.
因此,假设已完成(或者如果您使用的是 Python 3.6+ 则未完成),您可以subset()像这样定义函数:
subset = lambda d, *keys: [(key, d[key]) for key in d.keys() if key in set(keys)]
Run Code Online (Sandbox Code Playgroud)
给定正确创建的样本OrderedDict输入,这将返回此结果:
>>> subset(d, 'apple', 'banana')
[('banana', 3), ('apple', 4)]
Run Code Online (Sandbox Code Playgroud)
请注意,返回的列表中的对现在与键在OrderedDict.
| 归档时间: |
|
| 查看次数: |
1740 次 |
| 最近记录: |