关于python中的字典值操作
Posted
技术标签:
【中文标题】关于python中的字典值操作【英文标题】:Regarding dictionary value manipulation in python 【发布时间】:2019-12-09 07:31:15 【问题描述】:上下文: 该代码将用于表示在图搜索算法(如广度优先搜索)的实现中使用的图。 我想以字典的形式存储图形,其中键代表节点,每个键都有三个对应的值。首先是一组节点,“键”与之共享一条边。其次是用于显示已访问/未访问的布尔标志。第三是“键”与起始节点的距离。
"""
The 'test.txt' file contains the following:
1 2 3 4 5
2 1 3 4 5
3 1 2 5
4 1 2
5 1 2 3
"""
import math as m
def readGraph(path):
a =
file = open(path)
data = file.readlines()
for line in data:
items = line.split()
items = [int(i) for i in items]
a[items[0]] = items[1:len(items) + 1], 0, m.inf
return a
if __name__ == '__main__':
G = readGraph('test.txt')
print(G)
给定文件的字典(存储在“G”中)是:
G = 1: ([2, 3, 4, 5], 0, inf), 2: ([1, 3, 4, 5], 0, inf), 3: ([1, 2, 5], 0, inf), 4: ([1, 2], 0, inf), 5: ([1, 2, 3], 0, inf)
疑问:
假设现在我想将键 1 的第二个值从 0 更改为 1。
键入G[1] = G[1][0], 1, G[1][2]
似乎效率不高。
有更好的方法吗?
更新: 我尝试将字典条目保存为列表,但这是不可取的,因为它会改变我想要实现的字典格式。
以下是一个解决方案,但我仍然想以默认形式使用字典,每个键的元素存储为元组。
if __name__ == '__main__':
G = readGraph('test.txt')
print(G)
G[1] = list(G[1])
G[1][1] = 1
print(G)
【问题讨论】:
【参考方案1】:这样做的一种方法是,您可以使用嵌套字典来存储节点。以下是图形 G
的外观。
G =
1:
'nodes': [2, 3, 4, 5],
'is_visited': 0,
'distance': 'inf'
,
2:
'nodes': [1, 3, 4, 5],
'is_visited': 0,
'distance': 'inf'
然后你可以通过索引来获取值。
G[1]['is_visited'] = 1
【讨论】:
【参考方案2】:您可以将每个节点的值存储为列表而不是元组:
a[items[0]] = [items[1:len(items) + 1], 0, m.inf]
然后直接更新你想要的值:
G[1][1] = 1
另一个选项(感谢Bilal 他对这种方法的建议)是嵌套字典:
a[items[0]] = "edges": items[1:len(items) + 1], "is_visited": 0, "dist": m.inf
然后您可以通过以下方式访问各个元素:
G[1]["is_visited"] = 1
【讨论】:
是的。我已经以这种方式完成了实施。我想用字典试试。 您当前将值存储为元组 是的。 G[1] = list(G[1]) 然后 G[1][1] = 1 也可以。我尝试将字典条目存储为列表,但这也与列表实现类似。我不能使用字典的默认格式访问值吗? 你能澄清你的问题吗?您到底在寻找什么?更有效的实施是什么意思? 我想用元组形式存储的元素编辑值以上是关于关于python中的字典值操作的主要内容,如果未能解决你的问题,请参考以下文章