说我有一个国家的词典 - > [城市](可能是有序的词典):
{'UK': ['Bristol', 'Manchester' 'London', 'Glasgow'],
'France': ['Paris', 'Calais', 'Nice', 'Cannes'],
'Germany': ['Munich', 'Berlin', 'Cologne']
}
键(国家/地区)的数量是可变的:数组中元素城市的数量也是可变的。结果集来自搜索'在城市名称上,例如,搜索" San%"可能会遇到50k的结果(全球搜索)
数据将用于填充select2小部件---我想使用其分页功能...
是否有一种智能方法可以对此进行切片,以便[3:8]
可以产生:
{'UK': ['Glasgow'],
'France': ['Paris', 'Calais', 'Nice', 'Cannes'],
'Germany': ['Munich']
}
(对此问题提出的方式道歉 - 我不确定真正的用法会澄清问题......)
答案 0 :(得分:0)
如果我正确理解你的问题,正如评论中所说,这应该做到
from pprint import pprint
def slice_dict(d,a, b):
big_list = []
ret_dict = {}
# Make one big list of all numbers, tagging each number with the key
# of the dict they came from.
for k, v in d.iteritems():
for n in v:
big_list.append({k:n})
# Slice it
sliced = big_list[a:b]
# Put everything back in order
for k, v in d.iteritems():
for subd in sliced:
for subk, subv in subd.iteritems():
if k == subk:
if k in ret_dict:
ret_dict[k].append(subv)
else:
ret_dict[k] = [subv]
return ret_dict
d = {
'a': [1, 2, 3, 4],
'b': [5, 6, 7, 8, 9],
'c': [10, 11, 12, 13, 14]
}
x = slice_dict(d, 3, 11)
pprint(x)
$ python slice.py
{'a': [4], 'b': [5, 6], 'c': [10, 11, 12, 13, 14]}
输出与您的示例输出略有不同,但这是因为dict在传递给函数时没有被排序。这是a-c-b,这就是为什么b在6处切断而c没有被切断的原因