【问题标题】:in a dictionary with values being single integer change them into a list在值为单个整数的字典中将它们更改为列表
【发布时间】:2019-10-02 09:57:29
【问题描述】:

为简单起见,我的字典如下所示:

data ={"a": 12, "b": 13, "c": 22, "d": 33}

我有很大的字典。将键值对中的所有值转换为包含单个整数的列表的最有效方法是什么

我试过了

for key in data:
    data[key] = list(data[key])

给我:

TypeError:'int' 对象不可迭代。

这是否意味着我无法将单个整数转换为列表?

我可以通过以下方式获得所需的输出:

for key in data:
    lst = []
    lst.append(data[key])
    data[key] = lst

但感觉有一种更有效的方法。

想要的输出

  data ={"a": [12], "b": [13], "c": [22], "d": [33]}

【问题讨论】:

  • 你想要的输出是什么?
  • 你可以尝试使用字典理解,{k:[v] for k, v in data.items()}
  • @sid 我之前已经明确说明了所需的输出。哪一部分不清楚?

标签: python dictionary


【解决方案1】:

如下使用dict-comprehension:

data = {key: [value] for key, value in data.items()}

运行示例:

>>> data ={"a":12, "b":13, "c":22, "d":33}
>>> data = {key: [value] for key, value in data.items()}
>>> data
{'a': [12], 'b': [13], 'c': [22], 'd': [33]}

我还用ipython 看看如果我的或@Selcuk 哪个解决方案更有效,结果如下:

In [1]:
%%timeit
data ={"a":12, "b":13, "c":22, "d":33}
data = {key: [value] for key, value in data.items()}
1.05 µs ± 18.9 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In[2]:
%%timeit
data ={"a":12, "b":13, "c":22, "d":33}
data.update((k, [v]) for k, v in data.items())
1.61 µs ± 34.7 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

【讨论】:

  • OP 的代码就地替换了原始 dict 的键值,而这个答案创建了一个新的 dict,这可能不是 OP 想要的。
【解决方案2】:

您可以使用以下内容:

data.update((k, [v]) for k, v in data.items())

这将导致:

{'a': [12], 'c': [22], 'b': [13], 'd': [33]}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多