在项目数组中包含的元素上切片

时间:2015-03-06 12:10:21

标签: python-2.7 dictionary slice

说我有一个国家的词典 - > [城市](可能是有序的词典):

{'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']
} 

(对此问题提出的方式道歉 - 我不确定真正的用法会澄清问题......)

1 个答案:

答案 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没有被切断的原因