gpt4 book ai didi

python - 多键字典不适用于某些字符串

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

我想要迭代 dict 键,如 SilentGosht 中所述。回答。但在某些字符串上我收到错误。我的环境是QGIS 2.14 python终端

这是我的字典:

dictAliases = {
('ID_WS_INT','ID_WS'): 'B1',
('PGM_START','PGM_START_DATE','PGM_START_'): 'Debut programme'
}

这是我在 dict 上迭代的代码:

next(v for k, v in dictAliases.items() if 'PGM_START_' in k)

效果很好

但是如果将字典放在单独的文件中并将其导入为:

import sys

sys.path.append('C:\workspace\script')
import osirisdict
next(v for k, v in osirisdict.dictAliases.items() if 'ID_WS_int'in k)

我得到:

Traceback (most recent call last): File "", line 1, in StopIteration

仅在某些字符串上用 ID_WS_int 代替 ID_WS_INTPGM_START_ 代替 PGM_START_DATE p>

我不明白为什么导入会改变事情

这是导入的字典:

dictAliases = {
('ID_WS_INT','ID_WS'): 'B1',
('PGM_START','PGM_START_DATE','PGM_START_'): 'Debut programme',
('IMP_TYPE_F','IMP_TYPE_FR'): 'Type impetrant',
('PGM_START','PGM_START_DATE','PGM_START_'): 'Debut programme',
}

最佳答案

导入与此无关。

列表中的

in 检查字符串是否完全匹配。

第一个示例有效 PGM_START_ 因为您尊重这种情况。

在第二种情况下,由于您的字符串仅在我们忽略大小写的情况下匹配,因此 in 无法在 tuple 中找到该项目,生成器为空,并且您'重新收到 StopIteration 错误。

快速修复:

next(v for k, v in osirisdict.dictAliases.items() if 'ID_WS_INT' in k)

如果您不了解这种情况,可以使用 any 并比较键中项目的大写版本,按以下方式修复它:

next(v for k, v in dictAliases.items() if any('ID_WS_INT'==i.upper() for i in k))

但这仍然是一种性能非常低的执行查找方式,您根本没有使用字典查找速度。

我建议您建立一个新字典,其中 1 个键(大写)按元组项:

newdict = {k.upper():v for t,v in dictAliases.items() for k in t}

给出了newdict:

{'PGM_START_DATE': 'Debut programme', 'ID_WS_INT': 'B1', 'PGM_START_': 'Debut programme', 'PGM_START': 'Debut programme', 'ID_WS': 'B1'}

然后您可以使用 get 访问元素:

newdict.get('ID_WS_INT')

(如果未找到,则返回 None)。这会更高效、更Pythonic。

关于python - 多键字典不适用于某些字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42689031/

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