将部分案例与 Python 字典匹配

Posted

技术标签:

【中文标题】将部分案例与 Python 字典匹配【英文标题】:Matching partial cases to Python dictionary 【发布时间】:2016-03-23 13:46:28 【问题描述】:

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

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

(' 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”,它会将值更改为阿拉斯加。如果它是一个列表,我可以看到这非常简单,但是必须有另一种方法来做到这一点而无需循环。非常感谢任何帮助!

【问题讨论】:

字符串中的键是否始终以逗号分隔?您希望字符串'anchorage,ak,al' 的输出是什么?另外,“改变价值”是什么意思? 感谢您的回复。这是一个公平的观点,我不确定那个输出会是什么。它能否将第一个成功的匹配(在这种情况下为“,ak”)返回给阿拉斯加?通过更改值,我的意思是更改大小写以匹配字典值。 我认为以您字典的当前布局,如果没有循环,您将无法逃脱(为什么循环会是一件坏事?)-但是您是否考虑过像这样构建您的字典:@987654323 @?然后你只需用逗号split你的字符串并查看其中一个结果是否在你的字典中。 【参考方案1】:

我认为 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

【讨论】:

工作出色。我应该知道要从大小写中删除空格,呵呵。哦,好的,谢谢你们!

以上是关于将部分案例与 Python 字典匹配的主要内容,如果未能解决你的问题,请参考以下文章

将字符串与字典值完全匹配并检索键 - python

如何将 Python 字典附加到 Pandas DataFrame,将键与列名匹配

递归遍历带有列表的嵌套字典,并替换匹配的值

使用带有 python/pandas 的 dict 理解与 str.contains 进行部分字符串匹配

遍历数据框和字典以更新数据框中的值,以便与 python 匹配字符串

Python-追加/合并字典列表