【问题标题】:How to extract specific column keys and values from a dictionary?如何从字典中提取特定的列键和值?
【发布时间】:2019-04-09 15:04:14
【问题描述】:

我目前有一个字典,其中包含一个键,以及大约 30 列字符串和 int 格式的值。

例如:

Message: '0409-01:51:02.577'
Arguments: (['29', '30', '37', '5463', '84338', 'ABCD', 'x-abc1', 'xxx', '1A234BCD5EFG67890H1234IJ', 'ABCDEF', '02DA', '123456789', '1234567890', '1234567890', '1A234BCD5', '911', '1A234BCD5EF', '0', '12', '7', '1', '_', 'XY', 'ABC', '1A234BCDEF', 'ABCDEF', '1A234BCD', '1A234BCD', '1A234BCDDFW', 'L', '1'],)

我正在尝试按该顺序将`k`, `v[5]`, `v[12]`, `v[28]`, `v[25]`, `v[22`], `v[23]`, `v[9]` 提取到新的字典或列表中。

我尝试过在 list 和 dict 之间进行更改,我尝试了一行与多行。不幸的是,我无法更改传入的字典,因为我要从四个不同的来源提取数据来构建它。

abcdef = ('ABC', 'DEF')

incoming_files = {0409-01:51:02.577:['29', '30', '37', '5463', '84338', 'ABCD', 'x-abc1', 'xxx', '1A234BCD5EFG67890H1234IJ', 'ABCDEF', '02DA', '123456789', '1234567890', '1234567890', '1A234BCD5', '911', '1A234BCD5EF', '0', '12', '7', '1', '_', 'XY', 'ABC', '1A234BCDEF', 'ABCDEF', '1A234BCD', '1A234BCD', '1A234BCDDFW', 'L', '1']}

tc_wfiles = {}
    for k, v in incoming_files.items():
        if any(c in v for c in abcdef):
            try:
                self.tc_wfiles[k] = incoming_files[k]
                self.tc_wfiles[k].append(incoming_files[k][5])
                self.tc_wfiles[k].append(incoming_files[k][12])
                self.tc_wfiles[k].append(incoming_files[k][28])
                self.tc_wfiles[k].append(incoming_files[k][25])
                self.tc_wfiles[k].append(incoming_files[k][22])
                self.tc_wfiles[k].append(incoming_files[k][23])
                self.tc_wfiles[k].append(incoming_files[k][9])
            except IndexError:
                pass

应该发生的是键,这些值被放置在一个新的字典或列表中。然而,我得到的是关键字段中的整行,然后是值项。

【问题讨论】:

  • edit您的问题并提供minimal reproducible example
  • 这是我第一次在这里提出问题,希望我的编辑符合您的要求,如果不符合,我很抱歉。在这方面还是有点新意。
  • 对不起,但不是。 incoming_files 看起来像是字典,但变量没有定义。 abcdefself.tc_wfiles 相同。此外,logging.debug() 电话可能与该问题无关。请只输入足够的代码,其他人可以运行和使用来重现问题,并可能告诉你如何解决它(但不要更多)。
  • 请注意,我为我的失误道歉。
  • Jesse:好吧,因为那是几乎可执行的,我将撤回我的近距离投票——尽管了解所需/期望的输出应该是什么也很有帮助。

标签: python dictionary extract


【解决方案1】:

我不确定这是否回答了您的问题,因为您没有指出正确的结果应该是什么......但如果没有别的,也许这将为您提供一些见解。

abcdef = ('ABC', 'DEF')
incoming_files = {'0409-01:51:02.577': ['29', '30', '37', '5463', '84338',
                                        'ABCD', 'x-abc1', 'xxx',
                                        '1A234BCD5EFG67890H1234IJ', 'ABCDEF',
                                        '02DA', '123456789', '1234567890',
                                        '1234567890', '1A234BCD5', '911',
                                        '1A234BCD5EF', '0', '12', '7', '1', '_',
                                        'XY', 'ABC', '1A234BCDEF', 'ABCDEF',
                                        '1A234BCD', '1A234BCD', '1A234BCDDFW',
                                        'L', '1']}

tc_wfiles = {}
for k, v in incoming_files.items():
    if any(c in v for c in abcdef):
        try:
            tc_wfiles[k] = [k]
            tc_wfiles[k].append(v[5])
            tc_wfiles[k].append(v[12])
            tc_wfiles[k].append(v[28])
            tc_wfiles[k].append(v[25])
            tc_wfiles[k].append(v[22])
            tc_wfiles[k].append(v[23])
            tc_wfiles[k].append(v[9])
        except IndexError as exc:
            print('exception:', exc)

from pprint import pprint
pprint(tc_wfiles)

输出:

{'0409-01:51:02.577': ['0409-01:51:02.577',
                       'ABCD',
                       '1234567890',
                       '1A234BCDDFW',
                       'ABCDEF',
                       'XY',
                       'ABC',
                       'ABCDEF']}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-24
  • 2018-08-30
  • 1970-01-01
  • 2020-11-10
  • 1970-01-01
  • 1970-01-01
  • 2017-10-23
相关资源
最近更新 更多