字典理解中的嵌套循环
Nested loops in dictionary comprehension
我现有的字典列表如下:
FA = [{u'child': [{u'cdesc': u'Audit'},
{u'cdesc': u'Equity Research'},
{u'cdesc': u'Finance / Accounts / Tax'},
{u'cdesc': u'Investment Banking / M&A'}],
u'pdesc': u'Finance / Accounts / Investment Banking',
u'pid': 10007}]
我想把它转换成这样:
FA = {u'Audit':2,
u'Equity Research':2,
u'Finance / Accounts / Tax':2,
u'Investment Banking / M&A':2,
u'Finance / Accounts / Investment Banking':2}
我可以使用嵌套循环轻松地做到这一点,其代码如下所示。有什么方法可以使用字典理解来做到这一点吗?
a = dict()
for fa in FA:
a.update({slugify(fa['pdesc']):2})
for c in fa['child']:
a.update({slugify(c['cdesc']):2})
这会让您入门吗?
{ chld[u'cdesc']:2 for chld in FA[0]['child'] }
产生(不是 100% 但接近):
{u'Audit': 2,
u'Equity Research': 2,
u'Finance / Accounts / Tax': 2,
u'Investment Banking / M&A': 2}
这里的词典理解看起来很丑陋……无论如何……
# METHOD 1
FA_dict1 = {d:2 for v in FA[0][u'child'] for d in v.values()}
FA_dict1.update({FA[0][u'pdesc']: 2})
# METHOD 2
from itertools import chain
FA_dict = {d:2 for v in FA[0][u'child'] for d in chain(v.values(), [FA[0][u'pdesc']])}
# METHOD 3
FA_DICT = {d:2 for v in FA[0][u'child'] for d in list(v.values())+[FA[0][u'pdesc']]}
修真解法果然是丑小鸭!
运行以上数据:
{ k:2 for k in reduce(lambda x,y: x+y, [ [ chld[u'cdesc'] for chld in FA[0]['child'] ], [ FA[0][u'pdesc'] ] ] ) }
{u'Audit': 2,
u'Equity Research': 2,
u'Finance / Accounts / Investment Banking': 2,
u'Finance / Accounts / Tax': 2,
u'Investment Banking / M&A': 2}
我现有的字典列表如下:
FA = [{u'child': [{u'cdesc': u'Audit'},
{u'cdesc': u'Equity Research'},
{u'cdesc': u'Finance / Accounts / Tax'},
{u'cdesc': u'Investment Banking / M&A'}],
u'pdesc': u'Finance / Accounts / Investment Banking',
u'pid': 10007}]
我想把它转换成这样:
FA = {u'Audit':2,
u'Equity Research':2,
u'Finance / Accounts / Tax':2,
u'Investment Banking / M&A':2,
u'Finance / Accounts / Investment Banking':2}
我可以使用嵌套循环轻松地做到这一点,其代码如下所示。有什么方法可以使用字典理解来做到这一点吗?
a = dict()
for fa in FA:
a.update({slugify(fa['pdesc']):2})
for c in fa['child']:
a.update({slugify(c['cdesc']):2})
这会让您入门吗?
{ chld[u'cdesc']:2 for chld in FA[0]['child'] }
产生(不是 100% 但接近):
{u'Audit': 2,
u'Equity Research': 2,
u'Finance / Accounts / Tax': 2,
u'Investment Banking / M&A': 2}
这里的词典理解看起来很丑陋……无论如何……
# METHOD 1
FA_dict1 = {d:2 for v in FA[0][u'child'] for d in v.values()}
FA_dict1.update({FA[0][u'pdesc']: 2})
# METHOD 2
from itertools import chain
FA_dict = {d:2 for v in FA[0][u'child'] for d in chain(v.values(), [FA[0][u'pdesc']])}
# METHOD 3
FA_DICT = {d:2 for v in FA[0][u'child'] for d in list(v.values())+[FA[0][u'pdesc']]}
修真解法果然是丑小鸭!
运行以上数据:
{ k:2 for k in reduce(lambda x,y: x+y, [ [ chld[u'cdesc'] for chld in FA[0]['child'] ], [ FA[0][u'pdesc'] ] ] ) }
{u'Audit': 2,
u'Equity Research': 2,
u'Finance / Accounts / Investment Banking': 2,
u'Finance / Accounts / Tax': 2,
u'Investment Banking / M&A': 2}