如何在Python中使用循环遍历字典列表并提取部分数值?

huangapple go评论100阅读模式
英文:

How can I iterate through a list of dictionaries and extract a subset of values in Python using loops?

问题

我有一个Python列表,如下所示:

  1. data_list等于字典对象中的“values”键,该字典对象是一个项目列表
  2. "values": [
  3. {
  4. "a": 1,
  5. "b": 2,
  6. "center code here": 3,
  7. "d": 4
  8. },
  9. {
  10. "a": 1,
  11. "b": 2,
  12. "c": 3,
  13. "d": 4
  14. },
  15. {
  16. "a": 1,
  17. "b": 2,
  18. "c": 3,
  19. "d": 4
  20. },
  21. {
  22. "a": 1,
  23. "b": 2,
  24. "c": 3,
  25. "d": 4
  26. }
  27. ]

我还有另一个列表,其中包含我想要的值:

  1. listx = ["a", "b"]

这是我尝试过的代码:

  1. listx = ["a", "b"]
  2. dict2 = {}
  3. for d in data_list:
  4. for v, x in d.items():
  5. if v in listx:
  6. dict2[v] = x
  7. print(len(dict2))

我得到的结果是12,这是一个字典中的项目数。它没有遍历其他字典。有人可以帮忙吗?

我的目标是能够创建一个具有以下值的列表子集:

  1. "values": [
  2. {
  3. "a": 1,
  4. "b": 2
  5. },
  6. {
  7. "a": 1,
  8. "b": 2
  9. },
  10. {
  11. "a": 1,
  12. "b": 2
  13. },
  14. {
  15. "a": 1,
  16. "b": 2
  17. }
  18. ]

有人可以帮助我吗?我做错了什么?

英文:

Iterate through a list of dictionaries to get subset

I have a python list as follows:

data_list is equivalent to values key
in a dictionary object which is a list of items

  1. "values": [
  2. {
  3. "a": 1,
  4. "b": 2,
  5. "center code here": 3,
  6. "d": 4,
  7. },
  8. {
  9. "a": 1,
  10. "b": 2,
  11. "c": 3
  12. "d": 4,
  13. },
  14. {
  15. "a": 1,
  16. "b": 2,
  17. "c": 3
  18. "d": 4,
  19. },
  20. {
  21. "a": 1,
  22. "b": 2,
  23. "c": 3
  24. "d": 4,
  25. }
  26. ]

I also have another list that holds the values i want

  1. listx = [a,b]

This is what i tried :

  1. listx = [a,b]
  2. dict2 = {}
  3. for d in data_list:
  4. for v,x in d.items():
  5. if v in listx:
  6. dict2[v] = (x)
  7. print(len(dict2))

I get 12 which is the number of items in one dictionary. It doesn't iterate over the other dictionaries?
Can anyone help ?

My goal is to be able to create a subset of this list with the following values :

  1. "values": [
  2. {
  3. "a": 1,
  4. "b": 2
  5. },
  6. {
  7. "a": 1,
  8. "b": 2
  9. },
  10. {
  11. "a": 1,
  12. "b": 2
  13. },
  14. {
  15. "a": 1,
  16. "b": 2
  17. }
  18. ]

Can anyone help me here ? What am i doping wrong?

答案1

得分: 3

以下是您要翻译的代码部分:

  1. values = [
  2. {
  3. "a": 1,
  4. "b": 2,
  5. "c": 3,
  6. "d": 4,
  7. },
  8. {
  9. "a": 1,
  10. "b": 2,
  11. "c": 3,
  12. "d": 4,
  13. },
  14. {
  15. "a": 1,
  16. "b": 2,
  17. "c": 3,
  18. "d": 4,
  19. },
  20. {
  21. "a": 1,
  22. "b": 2,
  23. "c": 3,
  24. "d": 4,
  25. },
  26. ]
  27. listx = ["a", "b"]
  28. values_filtered = [{k: v for k, v in d.items() if k in listx} for d in values]
  29. print(values_filtered)

输出:

  1. [
  2. {"a": 1, "b": 2},
  3. {"a": 1, "b": 2},
  4. {"a": 1, "b": 2},
  5. {"a": 1, "b": 2}
  6. ]
英文:

You can use simple list comprehension to filter the values:

  1. values = [
  2. {
  3. "a": 1,
  4. "b": 2,
  5. "c": 3,
  6. "d": 4,
  7. },
  8. {
  9. "a": 1,
  10. "b": 2,
  11. "c": 3,
  12. "d": 4,
  13. },
  14. {
  15. "a": 1,
  16. "b": 2,
  17. "c": 3,
  18. "d": 4,
  19. },
  20. {
  21. "a": 1,
  22. "b": 2,
  23. "c": 3,
  24. "d": 4,
  25. },
  26. ]
  27. listx = ["a", "b"]
  28. values_filtered = [{k: v for k, v in d.items() if k in listx} for d in values]
  29. print(values_filtered)

Prints:

  1. [
  2. {"a": 1, "b": 2},
  3. {"a": 1, "b": 2},
  4. {"a": 1, "b": 2},
  5. {"a": 1, "b": 2}
  6. ]

答案2

得分: 2

以下是您提供的Python代码的翻译部分:

  1. listx = ["a", "b"]
  2. subset = []
  3. for d in data_list:
  4. subset_dict = {}
  5. for key, value in d.items():
  6. if key in listx:
  7. subset_dict[key] = value
  8. subset.append(subset_dict)
  9. print(subset)

输出:

  1. [{'a': 1, 'b': 2}, {'a': 1, 'b': 2}, {'a': 1, 'b': 2}, {'a': 1, 'b': 2}]

或者您可以使用itemgetter

  1. from operator import itemgetter
  2. listx = ["a", "b"]
  3. subset = [dict(zip(listx, itemgetter(*listx)(d))) for d in data_list]
  4. print(subset)
英文:
  1. listx = ["a", "b"]
  2. subset = []
  3. for d in data_list:
  4. subset_dict = {}
  5. for key, value in d.items():
  6. if key in listx:
  7. subset_dict[key] = value
  8. subset.append(subset_dict)
  9. print(subset)

Output:

  1. [{'a': 1, 'b': 2}, {'a': 1, 'b': 2}, {'a': 1, 'b': 2}, {'a': 1, 'b': 2}]

Or you can use itemgetter:

  1. from operator import itemgetter
  2. listx = ["a", "b"]
  3. subset = [dict(zip(listx, itemgetter(*listx)(d))) for d in data_list]
  4. print(subset)

huangapple
  • 本文由 发表于 2023年6月1日 05:08:31
  • 转载请务必保留本文链接:https://go.coder-hub.com/76377316.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定