我试图从字典中的某个点分割出一个字典。似乎做一个简单的items_dict[3:]
会起作用,但它不起作用。
items_dict = {
"Cannon barrels":10,
"Cannon furnace":12,
"Candle":36,
"Bronze arrowheads":39,
"Iron arrowheads":40,
"Steel arrowheads":41,
"Mithril arrowheads":42,
"Adamant arrowheads":4
}
print items_dict[3:] # Nope, this won't work
print items_dict["Candle"] # This will of course, but only returns the Candle's number
我只知道如何to slice a dictionary by keys that start with a certain string,但我只是想知道如何切割类似于列表的字典。
答案 0 :(得分:4)
词典没有顺序,因此您无法从某个点拆分它。看看你在那里的字典,你不能提前知道第一个元素是什么。
答案 1 :(得分:2)
如果你想在n个键之后拆分 - 不保证订单。
n=3
d1 = {key: value for i, (key, value) in enumerate(d.items()) if i < n}
d2 = {key: value for i, (key, value) in enumerate(d.items()) if i >= n}
答案 2 :(得分:2)
如果您想要按顺序存储密钥的字典,请使用collections.OrderedDict
http://docs.python.org/2/library/collections.html#collections.OrderedDict
答案 3 :(得分:1)
items = [
("Cannon barrels",10),
("Cannon furnace",12),
("Candle",36),
....
]
items_dict = dict(items)
items_3_dict = dict(items[3:])
并没有完全回答你的问题(参见@mgilson回答),但提供了一条前进的道路
答案 4 :(得分:1)
ditems = items_dict.items()
d1, d2 = dict(ditems[:3]), dict(ditems[3:])
print(d1)
print(d2)
{'Iron arrowheads': 40, 'Adamant arrowheads': 4, 'Mithril arrowheads': 42}
{'Candle': 36, 'Cannon barrels': 10, 'Steel arrowheads': 41, 'Cannon furnace': 12, 'Bronze arrowheads': 39}
或创建一个函数来分割关于n
- 值
from itertools import islice
def split(iterable,point):
return islice(iterable,None,point), islice(iterable,point,None)
d1, d2 = (dict(segment) for segment in split(items_dict.items(),3))
这将拆分关于第三个条目。
答案 5 :(得分:0)
您可以创建自定义类(仅限示例 - 切片仅适用于[1:4]
语法,而dict[missing_key]
返回None而不是抛出异常):
>>> class SliceDict(collections.OrderedDict):
... def __getitem__(self, val):
... if isinstance(val, slice):
... return {key: value for i, (key, value) in enumerate(d.items()) if val.start < i < val.stop}
... else:
... return self.get(val)
现在我们可以添加您的项目dict:
>>> d = SliceDict(items_dict)
SliceDict([('Adamant arrowheads', 4), ('Mithril arrowheads', 42), ('Iron arrowheads', 40), ('Candle', 36), ('Cannon barrels', 10), ('Steel arrowheads', 41), ('Cannon furnace', 12), ('Bronze arrowheads', 39)])
>>> d[1:5]
{'Candle': 36, 'Cannon barrels': 10, 'Iron arrowheads': 40}
>>> d['Candle']
36