gpt4 book ai didi

python - 从 python 字典创建边缘列表

转载 作者:太空宇宙 更新时间:2023-11-04 10:57:32 24 4
gpt4 key购买 nike

我有一个具有以下结构的字典:

1:{'Amendment': '1', 
'status': 'Stadf\xc3\xa6stet',
'Name': 'Bodil Kornbek',
'title': 'L 1 Forslag til till\xc3\xa6gsbevillingslov for 2004.',
'fremsat': '2005-03-04',
'Vote.Numeric': '2',
'PSession': '1',
'vedtaget': '2005-04-12',
'Lsession': '3',
'Voteid': '38',
'Month': '4',
'Year': '2005',
'Vote': 'Frav\xc3\xa6rende',
'Party': 'KD',
'Law': 'L 1',
'ministerie': 'Finansministeriet'}

键的范围从 1 到 ca。 500000,每个嵌套字典包含有关丹麦议会一名议员的一票信息。此外,还有标识该成员投票的唯一投票的信息。我希望每个成员都提取该成员活跃的所有选票,并将该成员的投票行为与所有其他在相同选票子集上活跃的成员进行迭代比较。

理想情况下,对于每个成员,我会将该成员与其他成员在他们活跃的选票上进行比较,并计算他们投票相同的选票与他们所有共同选票的比例。如果比例大于 0.65,则该对将添加到列表中。

所以最终结果应该是一个列表,格式如下:

[member1, member2
member1, member4
member1, member7
member2, member5
etc..
]

谁能告诉我如何在 python 中完成此操作?

最佳答案

首先,让我们转换数据(我会在这里做一些假设),使字典的键是国 session 员(由姓名标识),每个人的数据是一个映射他们如何对每个问题 (Voteid) 进行投票 (Vote.Numeric),因此 Voteid 是该子词典中的键。我们可以将其余信息视为无关紧要而丢弃。

非花哨的程序方式:

member_to_votes = defaultdict(dict)
for item in vote_data:
member_to_votes[item['Name']][item['Voteid']] = item['Vote.Numeric']

现在让我们定义两个投票记录之间的相似度:

def votes_agree(member_a, member_b, threshold):
# Find the union of issues they voted on...
issues = set(member_a.keys()).union(member_b.keys())
# See how many of these they voted the same way on (we use a placeholder
# if one member did not vote on the issue, so that they automatically
# disagree) and compare the fraction of agreeing votes to the threshold.
# There is a little hack in here: `True` is 1 in a numeric context, and
# `False` is zero, so we can add up the boolean results directly.
return sum(
member_a.get(issue, None) == member_b.get(issue, None)
for issue in issues
) / float(len(issues)) >= threshold

现在我们可以创建所有成员对并查看哪些成员同意:

def agreeing_members(member_to_votes, threshold):
return [
[a, b] for a, b in itertools.combinations(member_to_votes.keys(), 2)
if votes_agree(member_to_votes[a], member_to_votes[b], threshold)
]

关于python - 从 python 字典创建边缘列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8639378/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com