将部分案例与 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 字典附加到 Pandas DataFrame,将键与列名匹配
使用带有 python/pandas 的 dict 理解与 str.contains 进行部分字符串匹配