我有一本这样的字典

d = {"key_a":1, "anotherkey_a":2, "key_b":3, "anotherkey_b":4}

所以这里的值和键名并不重要。 关键(没有双关语)是相关的键在我上面的例子中共享相同的后缀,即_a_b

这些后缀事先知道(他们并不总是_a_b例如,有不同的后缀的数目不详。

我想做的是将相关的键提取到他们自己的字典中,并将所有生成的字典放在一个列表中。 上面的输出将是

output = [{"key_a":1, "anotherkey_a":2},{"key_b":3, "anotherkey_b":4}]

我目前的做法是先获取所有后缀,然后一次生成一个子字典并附加到新列表中

output = list()
# Generate a set of suffixes
suffixes = set([k.split("_")[-1] for k in d.keys()])

# Create the subdict and append to output
for suffix in suffixes:
    output.append({k:v for k,v in d.items() if k.endswith(suffix)})

有效(并且不会太慢或令人望而却步)但我只是想知道是否有更优雅的方法来使用列表或字典理解? 只是出于兴趣...

#1楼 票数:4 已采纳

使您的输出成为 defaultdict 而不是列表,后缀为键:

from collections import defaultdict
output = defaultdict(lambda: {})
for k, v in d.items():
    prefix, suffix = k.rsplit('_', 1)
    output[suffix][k] = v

这将在一次传递中拆分您的 dict 并导致如下结果:

输出 = {"a" : {"key_a":1, "anotherkey_a":2}, "b": {"key_b":3, "anotherkey_b":4}}

如果您坚持将其转换为列表,则可以简单地使用:

output = list(output.values())

#2楼 票数:1

你可以压缩线条

output = list()

for suffix in suffixes:
    output.append({k:v for k,v in d.items() if k.endswith(suffix)})

到列表理解,像这样

[{k:v for k,v in d.items() if k.endswith(suffix)} for suffix in suffixes]

是否更优雅,恐怕在旁人眼里。

不过,@Błotosmętek 建议的方法可能会更快,因为它有一个大字典,因为它会减少循环。

  ask by wstk translate from so

未解决问题?本站智能推荐:

5回复

使用字典分隔后缀

我需要从给定的单词中分离所有可能的后缀(大约1000)。 我正在考虑使用dict。 在这样做时,我会将后缀作为键(以及有关后缀的一些附加信息,作为进一步处理过程中所需的值)。 如果最长的后缀是4个字母,我会在dict中搜索所有可能的组合。 例如:给出一个词:'abcdefg'我会在d
2回复

根据嵌套键的值拆分嵌套字典

我有一个嵌套字典,我想根据end qty的值进行拆分。 我只想保留'end qty' == 0 。 我相信通过字典理解可以轻松完成此操作,但我不太正确。
2回复

通过自定义键函数将列表拆分为列表字典

我实现了一个小的辅助函数,它通过自定义键函数将列表拆分为字典。 以下实现有效,但感觉相当不pythonic: 我尝试使用以下 dict key_func ,显然它的性能key_func ,对key_func和二次运行时有很多不必要的调用。 样本输入和输出: 产生 有没有更好/更p
2回复

基于键值拆分嵌套字典

会有人能够给我基于一个公共密钥名称叫上如何分割嵌套的字典为单独的嵌套字典小费score和价值score ? 例如分解这个嵌套的字典nested_group_map_original : 使它看起来像下面这样,但以编程方式为两个名为nested_group_map_copy_lows和neste
5回复

在字典的特定键出现后将字典列表拆分为子列表

我有字典列表。 这些字典基本上每个都只有一个键值。 例如: 我试图在每次出现具有特定键"a"的字典后将字典列表lst划分为子列表。 我尝试使用我在互联网上看到的其他方式,但由于我是 Python 新手,我无法理解它们并获得所需的结果。 我希望最终结果如下所示:
1回复

分裂字典

我是一名新编码员,希望对文件进行一些计算以计算第一个四分位数(而不使用诸如numpy或panda之类的特殊命令)。 我计算了文件的中点,一切工作正常。 但是,当需要拆分我先前定义的字典时,它不起作用。 这是我尝试使用的代码命令 我收到错误:无法散列的类型'slice' 有
1回复

从一个键拆分字典的多个值

我有字典: 在这里,我有一个键,有两个值。 我可以使用以下方法获取密钥: 返回: 我习惯于处理数组并能够“切片”它们。 如何以与值的键类似的方式破坏此词典? 返回: 我怎样才能得到:
2回复

将从文件中读取的行拆分为字典键值对

我有以下格式的文件: 我想把它读成字典。 我编写了以下代码来实现此目的: 但是,在我看来,两次调用split()方法是一个错误的代码,并且必须有一种更简单/更好的方法来将行拆分为键值对,而我在这里找不到。 先感谢您!