因此,对于出现此问题的问题的背景,请参阅此link。
正如接受的答案所示,我继续提供所提供的代码,并且能够完成我最初想要的。但制作字典不是我的最终目标。我对该词典的最终目标是将其转换为DataFrame,我能够这样做。 这是我做的:
df = pd.DataFrame(([st, cty] for st, cty in dic.items() for cty in dic[st]),
columns = ["State", "City"])
为了您的准备参考,dic
变量如下:
{'Alabama': ['Auburn',
'Florence',
'Jacksonville',
'Livingston',
'Montevallo',
'Troy',
'Tuscaloosa',
'Tuskegee'],
'Alaska': ['Fairbanks'],
'Arizona': ['Flagstaff', 'Tempe', 'Tucson'],
'Arkansas': ['Arkadelphia',
'Conway',
'Fayetteville',
'Jonesboro',
'Magnolia',
'Monticello',
'Russellville',
'Searcy'],
'California': ['Angwin',
'Arcata',
'Berkeley',
'Chico',
'Claremont',
'Cotati',
'Davis',
'Irvine',
'Isla Vista',
'University Park, Los Angeles',
'Merced',
'Orange',
'Palo Alto',
'Pomona',
'Redlands',
'Riverside',
'Sacramento',
'University District, San Bernardino',
'San Diego',
'San Luis Obispo',
'Santa Barbara',
'Santa Cruz',
'Turlock',
'Westwood, Los Angeles',
'Whittier'],
'Colorado': ['Alamosa',
'Boulder',
'Durango',
'Fort Collins',
'Golden',
'Grand Junction',
'Greeley',
'Gunnison',
'Pueblo, Colorado'],
'Connecticut': ['Fairfield',
'Middletown',
'New Britain',
'New Haven',
'New London',
'Storrs',
'Willimantic'],
'Delaware': ['Dover', 'Newark'], .... all the other states with their city names
我的疑问是:虽然我得到了所需的输出,虽然我已经制定了" DataFrame理解",可以这么说,我自己,我并不完全理解双for
。
有人可以解释另一个for
内的for
在这种情况下的确切作用。我是熊猫的初学者。
答案 0 :(得分:3)
这是一个发电机,与Pandas无关。
术语([x, y] for x in q for y in p)
是Python生成器。您可以将此值分配给变量,例如g = ([x, y] for x in q for y in p)
,然后将迭代器分配给它:
for element in g:
print(element)
Pandas此时接受生成器并迭代它们以获取DataFrame
的所有值。
双for
的评估如下:
for x in q:
for y in p:
yield [x, y]
所以这个生成器产生的是q
和p
中所有元素组合的平面列表。