从bash调用的Python一线不区分大小写的字典查找

时间:2018-11-27 20:46:15

标签: python bash

即使在与Python中不区分大小写的字典相关的其他主题上,我也没有找到解决方案。

我有一个bash脚本,我需要使用从另一个.json文件中提取的密钥从.json文件中查找一个值。 (这些文件是Chrome扩展程序的一部分。)我发现执行此操作的最简单方法是将Python一线式放入bash脚本中。这是我现在所拥有的:

extName=$(cat "$localePath" | python -c "import sys, json; sys.stdout.write(json.load(sys.stdin)['"$nameKey"']['message'])")

这是问题所在……Chrome似乎并不关心其json文件中的大小写,在某些扩展中,我之前从扩展名的manifest.json中提取到$ nameKey中的密钥的大小写也是如此与$ localePath(扩展名的_locales文件夹之一中的messages.json文件的路径)中的密钥大小写不匹配。

是否可以用Python单行代码执行此操作,还是我必须找到其他方法来执行此操作?

2 个答案:

答案 0 :(得分:0)

这不是有史以来最优雅的单行代码,但是您可以将所有dict键和值转换为小写条目,并使用小写键进行查询。

Python 2.x:

extName=$(cat "$localePath" | python -c "import sys, json; {key.lower(): value.lower() for key, value in sys.stdout.write(json.load(sys.stdin).iteitems()}['"$nameKey"'.lower()]['message'])")

Python 3.x:

extName=$(cat "$localePath" | python -c "import sys, json; {key.lower(): value.lower() for key, value in sys.stdout.write(json.load(sys.stdin).items()}['"$nameKey"'.lower()]['message'])")

答案 1 :(得分:0)

我明白了!我修复了Aurora针对Python 2.x提出的建议解决方案中的一些问题,并最终解决了这个问题,

extName=$(cat "$localePath" | python -c "import sys, json; sys.stdout.write(dict((key.lower(), value) for key, value in json.load(sys.stdin).iteritems())['""$nameKey""'.lower()]['message'])")