关于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中的字典值操作的主要内容,如果未能解决你的问题,请参考以下文章

python字典的概念与基本操作

python if语句关于字典值

python关于字典的常用方法

Python3:关于列表的操作

Python中的字典

Python基础入门-字典