好的,这是一个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()
然后再把它翻回字典?
你如何用列表理解来解决这个问题?
提前感谢!
发布于 2013-06-13 05:43:06
尝试一下,使用Python2.7或更高版本中提供的dictionary comprehensions:
{ 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-13 15:11:36
对于任何名称
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-13 06:38:36
{item for item in my_dict.iteritems() if item[0][0].lower() == 'peter'}
.iteritems
遍历字典,我们使用.lower进行匹配,而不区分大小写。
https://stackoverflow.com/questions/17075848
复制相似问题