Python在列表中的给定元素之前定位元素

时间:2012-08-16 20:50:43

标签: python list dictionary

我有一本字典:

d = {'a': ['Thing', 'City', 10], 'b': ['Thing' ,'City', 5]} 

等等和num = 10

我想浏览字典并检查num是否与字典列表中的任何其他数字匹配。如果是这样,我想在数字前抓取2个元素并返回所有3.

例如,在这种情况下,由于num = 10a10,因此应该返回['Thing', 'City' 10]

到目前为止,我有这个:

for i in d.keys(): # goes through the dictionary
    for item in d[i]:
        if type(item) == int: # if the item is an int
            if num = item:
                 l.append(item)
                 #l.append the items before it

我想我的问题归结为:我如何在列表中的给定元素之前获取项目?所以在这种情况下,我有10个但也想要东西和城市。

谢谢!

4 个答案:

答案 0 :(得分:2)

尝试这样的事情:

for key, item in d.items():
  for idx, subitem in enumerate(item):
    if isinstance(subitem, int) and subitem == num:
      l.extend(subitem[idx-2:idx+1])

答案 1 :(得分:2)

简单地使用in关键字。

def get_list(num, d):
    for lst in d.values(): 
        if num in lst:
            return(lst) #or do whatever you want with the list

示例:

d = {'a': ['Thing', 'City', 10], 'b': ['Thing' ,'City', 5]}
get_list(10, d)
>>>  ['Thing', 'City', 10]
get_list(5,d)
>>>  ['Thing', 'City', 5]

答案 2 :(得分:0)

如果只是要比较d的值的最后一个元素,并且可能会出现多次......(虽然这不会进行隐式类型检查)...

matching = [k for k,v in d.iteritems() if v[-1] == 10]
for k in matching:
    print k, d[k]

答案 3 :(得分:0)

result = [v for v in d.itervalues() if v[2] == num]