6

好的,这是一个 Python 问题:

我们有一本字典:

my_dict = {
           ('John', 'Cell3', 5): 0, 
           ('Mike', 'Cell2', 6): 1, 
           ('Peter', 'Cell1', 6): 0, 
           ('John', 'Cell1', 4): 5, 
           ('Mike', 'Cell2', 1): 4, 
           ('Peter', 'Cell1', 8): 9
          }

你如何制作另一个只有键/值对的字典,其中包含名称为“Peter”的键/值对?

如果您将这本字典转换为元组的元组列表是否有帮助,通过

tupled = my_dict.items()

然后再把它翻回字典?

你如何用列表理解来解决这个问题?

提前致谢!

4

3 回答 3

6

试试这个,使用Python 2.7 或更高版本中可用的字典推导:

{ k:v for k,v in my_dict.items() if 'Peter' in k }

或者,如果我们确定名称将始终位于第一位,我们可以这样做,这会更快一些:

{ k:v for k,v in my_dict.items() if k[0] == 'Peter' }

如果您使用的是旧版本的 Python,我们可以使用生成器表达式和dict()构造函数的正确参数获得等效结果:

dict((k,v) for k,v in my_dict.items() if k[0] == 'Peter')

无论如何,结果如预期:

=> {('Peter', 'Cell1', 8): 8, ('Peter', 'Cell1', 6): 0}
于 2013-06-12T21:43:05.850 回答
1

对于任何名字

def select(d, name):
    xs = {}
    for e in d:
        if e[0].lower() == name.lower(): xs[e] = d[e]

    return xs

d = {('Alice', 'Cell3', 3): 9,
     ('Bob', 'Cell2', 6): 8,
     ('Peter', 'Cell1', 6): 0,
     ('Alice', 'Cell1', 6): 4,
     ('Bob', 'Cell2', 0): 4,
     ('Peter', 'Cell1', 8): 8
    }

print select(d, 'peter')

>>>{('Peter', 'Cell1', 8): 8, ('Peter', 'Cell1', 6): 0}
于 2013-06-13T07:11:35.990 回答
0
{item for item in my_dict.iteritems() if item[0][0].lower() == 'peter'}

.iteritems遍历字典,我们使用 .lower 进行匹配,不区分大小写。

于 2013-06-12T22:38:35.613 回答