一个函数返回两个逻辑映射一对一的列表。假设
name = ["facebook", "twitter", "myspace"]
hits = [4000, 2500, 1800]
因此,facebook的点击量为4000,twitter 2500和myspace 2500。
我想将这两个单独的列表转换为字典列表,如
[
{name: 'facebook',data: [4000]},
{name: 'twitter',data: [2500]},
{name: 'myspace',data: [1800]}
]
我的解决方案这样做是:
data = [
{"name":l, "data":[v]}
for idx1, l in enumerate(labels)
for idx2, v in enumerate(values)
if idx1 == idx2
]
是否有更强大的优雅方式处理逻辑一对一映射,或者我的解决方案是否准确?
答案 0 :(得分:13)
你可以这样做:
[{"name": n, "data": [h]} for n, h in zip(name, hits)]
虽然这符合您的要求,但这里的数据结构可能比您真正需要的更多。考虑:
>>> dict(zip(name, hits))
{'twitter': 2500, 'myspace': 1800, 'facebook': 4000}
这在更易于访问的数据结构中提供了相同的数据集。
答案 1 :(得分:4)
处理一对一关系的最简单,最快捷的方法是制作两个词典:
>>> name = ["facebook", "twitter", "myspace"]
>>> hits = [4000, 2500, 1800]
>>> name2hits = dict(zip(name, hits))
>>> hit2name = dict(zip(hits, name))
答案 2 :(得分:0)
与Efficient bidirectional hash table in Python?
相似但不完全相同您应该只使用两个词典,并在进行更新时将更新应用于两者。
此外,这里存在逻辑上的不一致:您的函数不是一对一的,或者您不需要将data: [...]
保留在列表中,因为只能有一个值。
如果您确实需要将其转换为词典列表,请使用https://stackoverflow.com/a/8600534/711085中指出的zip