使用推导式遍历字典并返回字典

20 投票
4 回答
32385 浏览
提问于 2025-04-17 21:15

如何通过字典推导式遍历一个字典并处理它。

>>> mime_types={
    '.xbm': 'image/x-xbitmap',
    '.dwg': 'image/vnd.dwg',
    '.fst': 'image/vnd.fst',
    '.tif': 'image/tiff',
    '.gif': 'image/gif',
    '.ras': 'image/x-cmu-raster',
    '.pic': 'image/x-pict',
    '.fh':  'image/x-freehand',
    '.djvu':'image/vnd.djvu',
    '.ppm': 'image/x-portable-pixmap',
    '.fh4': 'image/x-freehand',
    '.cgm': 'image/cgm',
    '.xwd': 'image/x-xwindowdump',
    '.g3':  'image/g3fax',
    '.png': 'image/png',
    '.npx': 'image/vnd.net-fpx',
    '.rlc': 'image/vnd.fujixerox.edmics-rlc',
    '.svgz':'image/svg+xml',
    '.mmr': 'image/vnd.fujixerox.edmics-mmr',
    '.psd': 'image/vnd.adobe.photoshop',
    '.oti': 'application/vnd.oasis.opendocument.image-template',
    '.tiff':'image/tiff',
    '.wbmp':'image/vnd.wap.wbmp'
}

>>> {(key,val) for key, val in mime_types.items() if "image/tiff" == val}

这样返回的结果是这样的:

set([('.tiff', 'image/tiff'), ('.tif', 'image/tiff')])

但我期待的是

('.tif', 'image/tiff')

我该如何修改这个结果,以得到一个像这样的字典:

{'.tif': 'image/tiff'}

4 个回答

1

在编程中,有时候我们会遇到一些问题,比如代码运行不正常或者出现错误。这些问题可能是因为我们写的代码有bug,或者是使用的工具和库不兼容。解决这些问题通常需要我们仔细检查代码,看看哪里出了问题。

另外,很多时候我们可以在网上找到其他人遇到类似问题的讨论,比如在StackOverflow这样的论坛上。这里有很多开发者分享他们的经验和解决方案,我们可以从中学习到很多。

总之,遇到问题时,不要慌张,先冷静下来,仔细分析,必要时可以寻求帮助,看看别人是怎么解决的。

you can try something like this

>>> print {k : v for k, v in mime_types.iteritems()}

Another Simple Example

    >>> print {i : chr(65+i) for i in range(4)}
    {0 : 'A', 1 : 'B', 2 : 'C', 3 : 'D'}
6

你可以像@Anubhav Chattoraj提到的那样使用字典推导式

或者把一个生成器表达式作为参数传给函数dict

In [165]: dict((k, mimes[k]) for k in mimes if mimes[k] == "image/tiff")
Out[165]: {'.tif': 'image/tiff', '.tiff': 'image/tiff'}

不要把这两种方法搞混了。

27

{(key,val) for key, val in mime_types.items() if "image/tiff" == val}

替换成

{key: val for key, val in mime_types.items() if "image/tiff" == val}
11

这个表达式:

{ value for bar in iterable }

是一个集合推导式

如果你想做一个字典推导式,你需要给Python提供一组用:分开的键值对:

{ key: value for bar in iterable }

撰写回答