【问题标题】:How to quickly parse out prefix to this string in dictionary key?如何在字典键中快速解析出此字符串的前缀?
【发布时间】:2016-11-18 19:00:10
【问题描述】:

我有一本 Python 字典:

dict1 = {'first': 'ABCDE', 'second': 12345, 'third': KITTY , 'four': dogcatbirdelephant, ...}

明确地说,我正在解析数据并将其放入 Python 中的字典中。

我的问题:有时third 的值有前缀。而不是值KITTYCAT,我有A:KITTYK:CAT。前缀可以是任何字母,并且总是有一个冒号分隔我想要的值(例如KITTY)和我不想要的前缀(A:

然而,并不是所有的价值观都是这样的。有些实际上是没有前缀的字符串。

如果我保存“冒号后的所有内容”,如何解析这些字典值?有人会用 for 语句检查吗? (我宁愿避免这种情况,因为我认为这会严重影响性能。)

【问题讨论】:

  • mystring.split(':')[-1]
  • 你保证最多有一个冒号吗?例如,值将始终采用 ba:b 格式,在您想要 b 的位置,而不是在您想要 b:c 的位置 a:b:c
  • @PatrickHaugh 如果没有:?它会返回什么?
  • 如果mystring 没有: 然后mystring.split(':')[-1] 返回mystring
  • 这取决于你如何构建你的 dict,但在最坏的情况下,你总是可以只做 dict1['third'] = dict1['third'].split(':')[-1]

标签: python dictionary string-parsing


【解决方案1】:

@PatrickHaugh 的回答是正确的。您可能需要进行一些过滤,因为您的示例列表既有整数也有字符串。

您的问题是“我正在解析数据并输入字典”,所以我假设它们来自双元组中的某个地方,而不是来自另一个字典。

如果您已经在字典中有数据,那么您将不得不遍历键。

#!/usr/bin/env python

class Kitty(object):
    def __init__(self):
        self.d = {}

    def meow(self, k, v):
        """check for integers before adding to dictionary"""
        try:
            int(v)
            self.d[k] = v
        except ValueError:
            self.d[k] = v.split(":")[-1]

if __name__ == "__main__":
    kitty = Kitty()
    kitty.meow("first", 12345)
    kitty.meow("second", "A:KITTY")
    kitty.meow("third", "B:KITTY")
    kitty.meow("fourth", "C:KITTY")
    kitty.meow("fifth", "KITTY")
    kitty.meow("sixty", "kreplach")

    print(kitty.d)

这会导致:

{'third': 'KITTY', 'second': 'KITTY', 'fourth': 'KITTY', 'sixty': 'kreplach', 'fifth': 'KITTY', 'first': 12345}

至于“高效”,这是另一个问题。 Python 的字符串方法非常高效,如何将数据提供给函数是您的决定。

【讨论】:

  • 当然,在检查类型时使用try 不如使用isinstance 漂亮。不要只是粘贴我的蹩脚代码!
猜你喜欢
  • 2020-02-28
  • 2023-02-22
  • 1970-01-01
  • 2010-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多