1

我有一本字典:

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

等等和num = 10

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

例如,在这种情况下,因为num = 10anda有一个10,它应该返回['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 个,但也想要 Thing 和 City。

谢谢你!

4

4 回答 4

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]
于 2012-08-16T20:55:54.310 回答
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])
于 2012-08-16T20:54:01.307 回答
0
result = [v for v in d.itervalues() if v[2] == num]
于 2012-08-16T21:22:30.963 回答
0

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

matching = [k for k,v in d.iteritems() if v[-1] == 10]
for k in matching:
    print k, d[k]
于 2012-08-16T21:15:47.063 回答