python list-in-dictionary转换为字典

时间:2016-10-30 20:00:41

标签: python pandas dictionary

我已经将pandas.core.series.Series转换为字典,数据是每个州中前3个县的人口,并且有一个令人讨厌的索引操作符,我无法摆脱它。字典采用以下形式:

{('Alabama', 37): 660367.0, ('Alabama', 45): 353089.0,
 ('Alabama', 49): 415395.0, ('Alaska', 71): 298695.0,
 ('Alaska', 76): 99631.0, ('Alaska', 85): 101095.0,
 ('Arizona', 106): 4167947.0, ('Arizona', 109): 1010025.0,
 ('Arizona', 110): 406584.0, ('Arkansas', 118): 249672.0,
 ('Arkansas', 174): 392664.0, ('Arkansas', 186): 225477.0, ...

我希望将其转换为:{('Alabama', 660367.0), ('Alabama', 353089.0), ... 我对编码很新,希望这很容易解决。我无法弄清楚是否有更好的方法来转换大熊猫系列,这首先避免了额外的数据(我只是使用data=dict(data)),或者可能是通过字典的for循环...?

2 个答案:

答案 0 :(得分:0)

您可以使用列表推导(或类似)轻松转换输出数据。如果您的数据位于data,则这些行中的任何一行都会执行您实际要求的操作,具体取决于您想要的数据类型:

out = [(key[0], value) for key, value in data.items()]
out = tuple((key[0], value) for key, value in data.items())
out = set((key[0], value) for key, value in data.items())
# In Python 2.7+ this is the same as the above
out = {(key[0], value) for key, value in data.items()}

但它们都不是与原作不同的字典。但这是因为对于字典,您需要为每个值使用唯一键,但状态名称不是唯一的。

基本思想是迭代每个项目并使用状态名称(这是密钥中的第一个条目,因此key[0]),然后将填充添加到它(仅{{1} }})。

现在你给出的那个,value实际上是一个集合(至少那是Python 3中的表示,在Python 2中这不是一个有效的表示法)。集合没有顺序,每个条目都是唯一的,因此它将保存两个具有相同大小的县,只有一个条目。

如果你想要一个字典,你需要确定密钥应该是什么以及密钥的值是什么。

答案 1 :(得分:0)

有更好的方法可以将其转换为您想要的DataFrame对象,但需要进行快速而肮脏的修复......

如果你真的想要这样:{('Alabama', 660367.0), ('Alabama', 353089.0), ... }

你可以这样做(假设是python2.7):

(我假设我们有一个变量d即字典。)

new_d = {(k[0], v) for k, v in d.iteritems()}

print new_d =>

{('Alabama', 353089.0), ('Alabama', 415395.0), ('Alabama', 660367.0), ('Alaska', 298695.0)} ...

这实际上是一个集合。