【问题标题】:python - how to iterate through values of dictpython - 如何遍历dict的值
【发布时间】:2021-02-13 04:30:03
【问题描述】:

我有一个要遍历的字典,以查找包含该键的所有值。我的输出将是一个单独的 dict,其中包含每个 dict 值中的数字,而不是值中的键或最终中的每个特定键值

dict_in =   
   {'6': ['2,9,8,10'], '1': ['3,5,8,9,10,12'], '4': ['2,5,7,8,9'], '2': ['3,4,7,6,13'], '12': ['1,7,5,9'], '3': ['9,11,10,1,2,13'], '10': ['1,3,6,11'], '5': ['4,1,7,11,12'], '13': ['2,3'], '8': ['1,6,4,11'], '7': ['5,2,4,9,12'], '11': ['3,5,10,8'], '9': ['12,1,3,6,4,7']}

所以输出会是这样的:

 {'6':['3,4,7,13,1,3,11,1,4,11,12,1,3,4,7'] , '4':['3,4,6,13,1,11,12,1,6,11,12,12,1,3,6'],'13': ['4,7,6,9,11,10,1']}

我是初学者,我什至不知道从哪里开始。将其转换为列表会更容易吗?

【问题讨论】:

  • 我不明白使用什么条件来达到预期的输出。
  • 他似乎想要切换他的键值,使用来自任何其他键的值,这些键包含原始键作为值但不包含它。复杂。

标签: python dictionary mapreduce


【解决方案1】:

关于您的问题,有一件事是一个额外的挑战。那是你或其他好心人来解决的。这只是向您的方向轻推。您的键值实际上是一个字符串。现在,如果它是实际整数,问题并不太复杂。另请注意,您根据要求编写的预期输出实际上输入错误,您错过了一些值。

如果使用整数而不是字符串,我可以向您展示一种方法,作为初学者,您希望可以理解:

dict_in = {'6': [2,9,8,10], '1': [3,5,8,9,10,12], '4': [2,5,7,8,9], '2': [3,4,7,6,13], '12':  [1,7,5,9], '3': [9,11,10,1,2,13], '10': [1,3,6,11], '5': [4,1,7,11,12], '13': [2,3], '8' :[1,6,4,11], '7': [5,2,4,9,12], '11': [3,5,10,8], '9': [12,1,3,6,4,7]}

dict_out = {}

for key in dict_in:
    if key == "6" or key == "4" or key == "13":
        for k,v in dict_in.items():
            for y in v:
                if int(key) in v and y != int(key):
                    dict_out.setdefault(key, []).append(y)


Output:
{'6': [3, 4, 7, 13, 1, 3, 11, 1, 4, 11, 12, 1, 3, 4, 7], '4': [3, 7, 6, 13, 1, 7, 11, 12, 1, 6, 11, 5, 2, 9, 12, 12, 1, 3, 6, 7], '13': [3, 4, 7, 6, 9, 11, 10, 1, 2]}

最后一点,我不知道为什么在地球上,您希望剩下的唯一键是 6,4 和 13。 在任何情况下,都不要认为这是一个完整的答案。

【讨论】:

  • 这些不是我想要留下的唯一键。我想全部离开。这些数字应该代表联系,目标是通过查找实际联系的人(在联系列表中 - 值中的 # )来找到他们可能联系的人,创建潜在联系的中间存储并减少它小到 2,3 或 4 个连接的数量。
  • 我明白了。你是自己输入的字典还是从某个地方来的?如果它来自某个文本文件,那么首先操作数据可能会更容易,因此它作为整数而不是单个字符串插入到值中。此外,如果您想保留所有现有键(在您的描述中,人员)以检查所有连接,只需删除 if key == "6" or key == "4" or key == "13": 并调整其余部分的缩进。
  • 是的,它来自映射器文件。我回去调整了它,所以它是整数。我会检查以确保它是整数。
  • 那你应该很好。无法估计速度,但对于这么多的数据,这并不重要。如果我们谈论的是更大的样本量,那可能会有所不同。
  • 那行得通。谢谢你。我在加载第一个 dict 之前将其转换为 int。欣赏它。
【解决方案2】:

现在确定你的意思了,所以刚刚创建了一些涵盖大部分内容的内容。随心所欲地改变它。

dict_in = {'6': ['2,9,8,10'], '1': ['3,5,8,9,10,12'], '4': ['2,5,7,8,9'], '2': ['3,4,7,6,13'], '12':  ['1,7,5,9'], '3': ['9,11,10,1,2,13'], '10': ['1,3,6,11'], '5': ['4,1,7,11,12'], '13': ['2,3'], '8' :['1,6,4,11'], '7': ['5,2,4,9,12'], '11': ['3,5,10,8'], '9': ['12,1,3,6,4,7']}

dict_out = {}
for key, values in dict_in.items():
    for item in values:
        if True:#your condition
            if key in dict_out.keys():
                dict_out[key].append(item)
            else:
                dict_out[key] = [item]

print(dict_out)

【讨论】:

  • 不确定我做错了什么,但我使用了这个并取回了 dict_out 中的原始字典
  • 好吧,我不确定您到底想要什么,所以它编写了这段代码。它基本上告诉你如何使用 dict.items()、dict.keys() 等,以便你了解它是如何工作的,然后根据你的问题进行更改
猜你喜欢
  • 2018-03-16
  • 2013-06-02
  • 2019-04-24
  • 2019-07-28
  • 2018-11-29
  • 2017-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多