将部分案例匹配到 Python 字典

Matching partial cases to Python dictionary

乍一看,我认为这是一个简单的问题,但我找不到准确适合的答案...

我有一本像这样的州名和缩写字典;

{(' ak', ',ak', ', ak', 'juneau', ',alaska', ', alaska'): 'alaska',
 (' al', ',al', ', al', 'montgomery', ',alabama', ', alabama'): 'alabama',
 (' ar', ',ar', ', ar', 'little rock', ',arkansas', ', arkansas'): 'arkansas',
 (' az', ',az', ', az', 'phoenix', ',arizona', ', arizona'): 'arizona',

我试图将这本字典映射到我在 pandas 数据框中拥有的各种自我报告的 Twitter 位置案例,以查找部分匹配项。例如,如果一个案例读取 'anchorage,ak',它将把值更改为阿拉斯加。如果它是一个列表,我可以看到这非常简单,但必须有另一种方法可以在不循环的情况下执行此操作。非常感谢任何帮助!

我觉得timgeb上面的想法是对的。我要补充两点:

1) 您还可以在处理之前从给定的案例中删除所有空格——因此,不需要将 ' ak'',ak'', ak' 全部包含为键——一个简单的 'ak' 键就足够了。

2) 我不会在字典中重复状态值,而是创建一个从整数到状态的额外散列,即 {0: 'alaska, 1: 'alabama' ...} 并将相应的整数键存储在原始字典中。

因此您生成的字典应该如下所示:

A = {'ak': 0, 'juneau': 0, 'alaska': 0, 'al': 1, 'montgomery': 1, 'alabama': 1, ...}

并且要从整数值访问州名称,您应该有另一个像这样的字典用于所有 50 个州:

B = {0: 'alaska', 1: 'alabama',  ...}

所以给定一个案例...

case = 'anchorage,ak'
case_list = case.replace(' ', '').split(',')  # remove all whitespace and split case by comma
for elem in case_list:
    if elem in A:
        # insert code to replace case with B[A[elem]]
        break