如何从元组列表中的字典获取值?

3
我有一个像下面这样的字典,我想将值为1,1的含义存储在列表中。
sc_dict=[('n', {'rh': 1}), ('n', {'rhe': 1}), ('nc', {'rhex': 1})]

我想要一个数组[1,1,1]

这是我的代码:

dict_part = [sc[1] for sc in sc_dict]

print(dict_part[1])

L1=[year for (title, year) in (sorted(dict_part.items(), key=lambda t: t[0]))]
print(L1)

如果以下任何一种解决方案解决了您的问题,请考虑接受(左侧的绿色勾号),或随时要求澄清。 - jpp
嗨,我看到你是SO的新手。如果你觉得某个答案解决了问题,请点击绿色的勾选标记将其标记为“已接受”。这有助于保持对那些仍未得到答案的旧SO的关注。 - fferri
4个回答

3
>>> [v for t1, t2 in sc_dict for k, v in t2.items()]
[1, 1, 1]

t1t2 分别是每个元组的第一个和第二个项,kv 是字典 t2 中的键值对。


谢谢!我该如何为不在sc_dict中的值添加0?基本上,我有两个像这样的字典:sc_dict_1=[('n', {'rh': 1}), ('n', {'rhe': 1}), ('nc', {'rhex': 1})]和sc_dict2=[('n', {'hm': 1}), ('n', {'rhe': 1}), ('nc', {'rhex': 1})]。例如,我想要数组一[0, 1, 1, 1],因为来自数组2的hm在数组1中不存在。 - sara jones
@sarajones:哪些值?请在您的原始问题中添加一个示例。 - fferri
抱歉!请看sc_dict2。它有('n',{'hm':1}),而在sc_dict_1中不存在。因此,我想为('n',{'hm':1})在结果数组中添加0,并得到最终结果:[0, 1, 1, 1]。 - sara jones
你的例子非常模糊。我假设你想要处理两个数组中相同位置的项目,即将sc_dict1的第一个项目与sc_dict2的第一个项目进行比较,然后将sc_dict1的第二个项目与sc_dict2的第二个项目进行比较,以此类推...在这种情况下,考虑使用zip(sc_dict_1, sc_dict2),这样你就有了一个单一的压缩数组,在这种情况下,第一个项目将是(('n', {'rh': 1}), ('n', {'hm': 1}))。现在,从这个项目中,你如何计算0/1值? - fferri
不,基本上我想要的是两个数组:array_sc_dict_1=[0,1,1,1] 和 array_sc_dict2=[0,1,1,1]。因为我想使用启发式距离,所以我的两个数组长度应该相同吗? - sara jones
在你的例子中,输入数组有3个项,结果数组有4个0/1值。不清楚你想要计算什么。最好提出一个新问题,解释你想要计算什么,并提供一些清晰明确的示例。 - fferri

1
你可以使用解包操作符:
sc_dict=[('n', {'rh': 1}), ('n', {'rhe': 1}), ('nc', {'rhex': 1})]
new_data = [list(b.values())[0] for _, b in sc_dict]

输出:

[1, 1, 1]

如果再加上一步操作,它就可以变得更加简洁:

d = [(a, b.items()) for a, b in sc_dict]
new_data = [i for _, [(c, i)] in d]

0

你可以在列表推导式的一部分中使用next来检索字典的第一个值。

这适用于你的字典长度为1的情况。

sc_dict=[('n', {'rh': 1}), ('n', {'rhe': 1}), ('nc', {'rhex': 1})]

res = [next(iter(i[1].values())) for i in sc_dict]

# [1, 1, 1]

0
我尝试了以下简单的方法:
sc_dict=[('n', {'rh': 1}), ('n', {'rhe': 1}), ('nc', {'rhex': 1})]
l = []
for i in range(len(sc_dict)):
    l.extend(sc_dict[i][1].values())
print l

输出结果l将会是[1, 1, 1]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接