The expression:
{ value for bar in iterable }
is a set comprehension.
In order to do a dict comprehension, you have to provide Python with a set of key-value pairs separated by :
:
{ key: value for bar in iterable }
题
How to iterate over a dictionary by dictionary comprehension to process it.
>>> 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}
This is returning result like this:
set([('.tiff', 'image/tiff'), ('.tif', 'image/tiff')])
But I'm expecting
('.tif', 'image/tiff')
How can I modify that result to get a dictionary like :
{'.tif': 'image/tiff'}
解决方案 2
The expression:
{ value for bar in iterable }
is a set comprehension.
In order to do a dict comprehension, you have to provide Python with a set of key-value pairs separated by :
:
{ key: value for bar in iterable }
其他提示
Replace
{(key,val) for key, val in mime_types.items() if "image/tiff" == val}
with
{key: val for key, val in mime_types.items() if "image/tiff" == val}
You can do dictionary comprehension as @Anubhav Chattoraj suggested.
Or pass a generator expr as an argument to function dict
:
In [165]: dict((k, mimes[k]) for k in mimes if mimes[k] == "image/tiff")
Out[165]: {'.tif': 'image/tiff', '.tiff': 'image/tiff'}
Don't mix the two ways up..
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'}