将dict的元组键转换为新的字典

rog*_*ger 1 python dictionary tuples

dict喜欢这样的:

{
    ('America', 25, 'm', 'IT'): 10000,
    ('America', 22, 'm', 'IT'): 8999,
    ('Japan',   24, 'f', 'IT'): 9999,
    ('Japan',   23, 'f', 'IT'): 9000
}
Run Code Online (Sandbox Code Playgroud)

现在,我希望('America', 'm', 'IT')在此示例中使用key获取所有结果.在上面,那将是:

{25: 10000, 22: 8999}
Run Code Online (Sandbox Code Playgroud)

我目前的解决方案如下:

res = dict()
for key, cnt in stats.items():
    country, age, sex, job = key
    try:
        res[(country, sex, job)][age] = cnt
    except KeyError as e:
        res[(country, sex, job)] = {}
        res[(country, sex, job)][age] = cnt

print res['America', 'm', 'IT']
Run Code Online (Sandbox Code Playgroud)

我有更好的方法吗?因为这段代码看起来并不那么简单.

mu *_*u 無 5

您可以使用dict理解来执行此操作:

>>> data = {
...     ('America', 25, 'm', 'IT'): 10000,
...     ('America', 22, 'm', 'IT'): 8999,
...     ('Japan',   24, 'f', 'IT'): 9999,
...     ('Japan',   23, 'f', 'IT'): 9000
... }
>>> {x: value for (w, x, y, z), value in data.items() if w == "America" and y == "m" and z == "IT"}
{25: 10000, 22: 8999}
Run Code Online (Sandbox Code Playgroud)