【问题标题】:getting keys in a dictionary that do not contain "x" variable Python获取不包含“x”变量Python的字典中的键
【发布时间】:2015-03-25 05:45:53
【问题描述】:

我有以下字典

字典 = {'\x85': 1, '\x84': 1, 'C': 3828}

我想要的只是不包含数字的键的键和相应的值,这是我写的,但它不起作用。我遇到了一个关键错误。顺便说一下,我在顶部导入 re。

new_dictionary = {}   
for key in diciontary:  
      if r"\d" not in key:  
              new_dictionary[key] += dictionary[key]

但是这不起作用,我遇到了一个关键错误。我认为这意味着该密钥不存在,但这正是我想要的,除了带有数字的密钥之外的所有内容。

在这种情况下,我的预期输出是
字典 = {'C': 3828}

虽然我认为我可能会遇到麻烦,因为密钥是一个字符串,即使其中有一个数字,我认为它读取的是一个字符串,所以正则表达式在这里不起作用?

这实际上是一本大字典的一部分,我在这里粘贴的这段代码适用于其他有数字的情况,但是有一些通过了吗?那是因为实际字符被保存为不同的类型吗?无论哪种方式,我都不确定如何删除它们。

【问题讨论】:

  • 你的预期输出是什么?
  • '\x85' 不包含数字。你很可能会以错误的方式解决这个问题。为什么你的 dict 一开始就有这些键,这些键的什么属性让你希望它们消失?
  • 我只想要数字,并不意味着我想要这个键值中的 x。如果它包含除字母之外的任何内容,我想排除整个键。我尝试用“\\”来指代它们,但效果不佳?
  • 提示dictionary = {'\x43': 3828} 的预期输出是什么?

标签: python regex dictionary


【解决方案1】:

您需要在搜索或匹配功能中使用正则表达式模式。所以把if条件改成,

if not re.search(r"\d", key): 

>>> dictionary = {'\x85': 1, '\x84': 1, 'C': 3828}
>>> {i:j for i,j in dictionary.items() if re.search(r'[A-Za-z]', i)}
{'C': 3828}

如果在键上找到单个字母,这将打印字典项。

【讨论】:

  • 它没有打印出密钥错误消息,但它仍然打印包含数字的值,我认为这是因为整个密钥是一个字符串。我认为这可以在 python 中发生对吗?
  • 请注意,'\x85' 会打印出一个 unicode 字符。所以上面的正则表达式模式也会打印出'\x85'键的值。
  • 是的,这不是我想要的。我对原文做了修改,看看
【解决方案2】:
new_dictionary = {k:v for k,v in dictionary.iteritems() if k.isalpha()}

【讨论】:

  • 没有人喜欢聪明的亚历克 :-)
  • 如果字典中有 '.''}' 之类的键,这可能无法满足 OP 的要求。
【解决方案3】:

您似乎对'\x85' 之类的字符串实际上是什么感到困惑。这些不一定是带有数字的字符串。他们是escape sequences

\xhh    Character with hex value hh

除非您更清楚地确定它们有什么问题,以及您希望在输出中保留哪些字符,否则没有人可以告诉您如何去除它们。

比如'\x43'是python中表示字符串'C'的另一种方式,所以下面两个dict其实是相等的!

>>> dict1 = {'\x85': 1, '\x84': 1, 'C': 3828}
>>> dict2 = {'\x85': 1, '\x84': 1, '\x43': 3828}
>>> dict1 == dict2
True

【讨论】:

    猜你喜欢
    • 2012-12-18
    • 2012-05-09
    • 2011-02-12
    • 2016-05-27
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 2017-12-17
    • 1970-01-01
    相关资源
    最近更新 更多