2014-03-07 69 views
7

如何通过字典理解来对字典进行迭代来处理它。通过理解迭代字典并获取字典

>>> 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'} 

回答

2

表达:

{ value for bar in iterable } 

set comprehension

为了做一个字典理解,你必须提供的Python与:分开的一组键 - 值对:

{ key: value for bar in iterable } 
12

替换

{(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} 
3

你可以做dictionary comprehension作为@Anubhav Chattoraj建议。

,或通过generator expr作为参数传递给函数dict

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

不要混合两种方法了..

+0

这本来是更好,如果你已经避免了'.items ()' – thefourtheye

+0

@thefourtheye为什么?你不会得到'ValueError:太多值来解包'吗? – zhangxaochen

+0

'dict((k,mimes [k])for m in mimes if mimes [k] == image/tiff“)''''你会避免由'.items()生成的居中列表' – thefourtheye

1
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'}