gpt4 book ai didi

python - 确保县边界字典中的交换性/互惠性

转载 作者:太空宇宙 更新时间:2023-11-03 15:12:41 32 4
gpt4 key购买 nike

背景:我从美国人口普查的县邻接文件开始。不幸的是,该文件的格式不一致,因此我的初始脚本将该 tab 分隔文件提取到具有县 i 键(由其 Fips 代码表示)和值的字典中与县 i 相邻的所有县的列表(再次使用 Fips 代码)会产生错误。

问题:我当前的字典违反了“互惠”。如果一个县与另一个县接壤,则第二个县也必须与第一个县接壤。在我的字典中,对于县i,经常有一个县j位于县i的相邻县的值中,但是县i 不包含在重点县j 的值中。

所需解决方案:包含每个县(关键或第 0 个条目)及其所有相邻县的条目的字典或列表列表。

TASK:遍历字典中的每个项目,访问每个项目的值列表中具有键的所有项目,并检查互惠关系是否成立(如果不成立,则添加该键)

最小工作示例(无意义值):

Adj_counties_pre  = { 12000 : [12001, 12003], 
12001 : [12004],
12003 : [12004, 12001],
12004 : [12003, 12000]}
...
Adj_counties_post = { 12000 : [12001, 12003, 12004],
12001 : [12004, 12003, 12000],
12003 : [12004, 12001, 12000],
12004 : [12003, 12000, 12001]}

我无法弄清楚如何遍历字典来解决这个问题。
谢谢!

最佳答案

您可以使用以下解决方案:

from collections import defaultdict

result = defaultdict(set)

for k,vs in adj_counties_pre.items():
for v in vs:
result[k].add(v)
result[v].add(k)

adj_counties_post = {k:list(v) for k,v in result.items()}

代码的工作原理如下,首先我们构造一个临时的defaultdict(set)defaultdict 是一个字典,如果找不到某个键,它会通过调用工厂(此处为set)来构造值。

接下来我们迭代所有键值对(k,vs)。对于每个值 vs 及其元素 v。对于每个键元素对,我们将元素 v 添加到与键 k 关联的集合中,并将键 k 添加到关联的集合中与元素v

接下来我们要么完成(defaultdict 是一本字典,这个字典将县代码映射到一组县代码上),或者我们可以决定将其转换为具有字典理解功能的普通字典。然后生成:

>>> adj_counties_post
{12000: [12001, 12003, 12004], 12001: [12000, 12003, 12004], 12003: [12000, 12001, 12004], 12004: [12000, 12001, 12003]}

另请注意,变量通常以小写字母开头。

关于python - 确保县边界字典中的交换性/互惠性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44099471/

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