从字典中获取具有连续键的值

2024-09-29 23:18:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样的字典:

{0:'I', 3: 'Mr.', 5: 'Nevrekar', 8: 'JK', 14: 'Soham', 15: 'Sharma',  4: 'Akshay'}

我想返回连续键的第一个组合(最少2个)。 在上面的例子中是(3,4,5)。你知道吗

所以它会返回一个列表:

['Mr.', 'Akshay', 'Nevrekar'].

我怎样才能做到这一点?你知道吗

我的尝试:

name=[]
count = 0
for k,g in name_list.items():
    if count == 0:
        temp =None
    if k-1 == temp:
        name.append(g)

    count+= 1
    temp = k

输出为:

['Akshay', 'Nevrekar', 'Sharma']

Tags: namein列表forif字典counttemp
2条回答

the docs

>>> a = {0:'I', 3: 'Mr.', 4: 'Akshay', 5: 'Nevrekar', 8: 'JK', 14: 'Soham', 15: 'Sharma'}
>>>
>>> 
>>> from itertools import groupby
>>> from operator import itemgetter
>>>
>>> con_ser = None
>>> for k, g in groupby(enumerate(sorted(a.keys())), lambda (i,x):i-x):
...     item = map(itemgetter(1), g)
...     if(len(item) >= 3):
...             con_ser = item
...             break
... 
>>> 
>>> [a.get(x) for x in con_ser] .        #con_ser = [3, 4, 5]
['Mr.', 'Akshay', 'Nevrekar']
>>> 

有一个来自more_itertools配方,在这里很方便:

import more_itertools as mit

d = {0:'I', 3: 'Mr.', 4: 'Akshay', 5: 'Nevrekar', 8: 'JK', 14: 'Soham', 15: 'Sharma'}
cons = [list(group) for group in mit.consecutive_groups(sorted(d.keys()))]
# [[0], [3, 4, 5], [8], [14, 15]]
res = [[d[y] for y in x] for x in cons if len(x)>1]
# [['Mr.', 'Akshay', 'Nevrekar'], ['Soham', 'Sharma']]

如果只需要连续整数至少为3的组,则必须相应地修改不等式(len(x) > 2)。你知道吗

相关问题 更多 >

    热门问题