Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法访问嵌套字典中的值以在网络中添加链接_Python_Dictionary_Mininet - Fatal编程技术网

Python 无法访问嵌套字典中的值以在网络中添加链接

Python 无法访问嵌套字典中的值以在网络中添加链接,python,dictionary,mininet,Python,Dictionary,Mininet,我有下面的字典 “S 2”2::{5 5’:{5 5’:{5 5’:{7 7 7,,,,'S 2’:{5’:{10'bw:20,“延迟”20,“延迟':'1米S’:'1'1’:{1'1’,{1 1'1'1'1'1'1'1'1'1'1'1'1'3'3'3'3'3'3'3'3'3'3'3'3'3'3'3'3'3,,,,,{1'S 1'3'3'3'3'3'3'3'3'3'3'3'3'3'3'3'3'3'3'3'3'3,,,,,,,,,,,,,,,'3'3'3'3'3'3'3'3'3'3'3'3'3'3

我有下面的字典

“S 2”2::{5 5’:{5 5’:{5 5’:{7 7 7,,,,'S 2’:{5’:{10'bw:20,“延迟”20,“延迟':'1米S’:'1'1’:{1'1’,{1 1'1'1'1'1'1'1'1'1'1'1'1'3'3'3'3'3'3'3'3'3'3'3'3'3'3'3'3'3,,,,,{1'S 1'3'3'3'3'3'3'3'3'3'3'3'3'3'3'3'3'3'3'3'3'3,,,,,,,,,,,,,,,'3'3'3'3'3'3'3'3'3'3'3'3'3'3'3'3'3'}},'s7':{'h5':{'bw':10,‘延迟’:'5ms'},'h6':{'bw':10,‘延迟’:'5ms'} 我想访问link的bw和delay值。例如,我想
添加link(s7,h6,bw=10,delay=5ms)

我使用下面的代码 #!/usr/bin/python

import yaml
#from ruamel import yaml
from mininet.net import Mininet
from mininet.node import Controller, RemoteController, OVSController
from mininet.cli import CLI
from mininet.log import setLogLevel, info
from mininet.link import TCLink
def myNetwork():

# Create an instance of Mininet class i.e. the network with default values
net = Mininet(autoStaticArp=True, autoSetMacs=True)

a_yaml_file = open("Complex_Topology.yaml")
parsed_yaml_file = yaml.load(a_yaml_file, Loader=yaml.FullLoader)
parsed_yaml_file["Controllers"]
parsed_yaml_file["Hosts"]
print(parsed_yaml_file["Links"])
parsed_yaml_file["Switches"]

for i in parsed_yaml_file["Controllers"]:
    net.addController(i)
for i in parsed_yaml_file["Hosts"]:
    net.addHost(i)
for i in parsed_yaml_file["Switches"]:
    net.addSwitch(i) 
d=parsed_yaml_file["Links"]
def freeze(x):
    if isinstance(x, dict):
        return frozenset(freeze(items) for items in x.items())
    elif isinstance(x, list):
        return tuple(freeze(value) for value in x)
    return x

for i in d.keys():
    for j in d[i].keys():
        k=freeze(d[i].values) 
        net.addLink(i,j,k)
info( '*** Starting network\n')
net.start()
# Start the Mininet CLI to run commands
CLI(net)
# Stop the network
net.stop()

if __name__ == '__main__':
    setLogLevel( 'info' )
    myNetwork()
我得到以下错误

Traceback (most recent call last):

File "new.py", line 83, in <module>
myNetwork()
File "new.py", line 73, in myNetwork
net.addLink(i,j,k)
File "/home/sudhanshu/Desktop/SDN/mininet/net.py", line 400, in addLink
link = cls( node1, node2, **options )
File "/home/sudhanshu/Desktop/SDN/mininet/link.py", line 450, in __init__
self.makeIntfPair( intfName1, intfName2, addr1, addr2,
File "/home/sudhanshu/Desktop/SDN/mininet/link.py", line 495, in makeIntfPair
return makeIntfPair( intfname1, intfname2, addr1, addr2, node1, node2,
File "/home/sudhanshu/Desktop/SDN/mininet/util.py", line 266, in makeIntfPair
raise Exception( "Error creating interface pair (%s,%s): %s " %
Exception: Error creating interface pair (s1-eth<built-in method values of dict object at 0x7f1f6b6035c0>,s2-eth1): bash: built-in: No such file or directory
回溯(最近一次呼叫最后一次):
文件“new.py”,第83行,在
我的网络()
myNetwork中第73行的文件“new.py”
net.addLink(i,j,k)
文件“/home/sudhanshu/Desktop/SDN/mininet/net.py”,第400行,在addLink中
链路=cls(节点1、节点2、**选项)
文件“/home/sudhanshu/Desktop/SDN/mininet/link.py”,第450行,在__
self.makeIntfPair(intfName1、intfName2、addr1、addr2、,
makeIntfPair中的文件“/home/sudhanshu/Desktop/SDN/mininet/link.py”,第495行
返回makeIntfPair(intfname1、intfname2、addr1、addr2、node1、node2、,
makeIntfPair中的文件“/home/sudhanshu/Desktop/SDN/mininet/util.py”,第266行
引发异常(“创建接口对(%s,%s)时出错):%s%
异常:创建接口对(s1eth,s2-eth1)时出错:bash:内置:没有这样的文件或目录
我试图操纵代码,但失败了


有人能帮我一下吗?

如果您想将方法调用为
addLink(s7,h6,bw=10,delay=5ms)
,那么您可以使用以下方法创建链接:

for i in d:
    for j in d[i]:
        net.addLink(i, j, **d[i][j])

如果要将该方法调用为
addLink(s7,h6,bw=10,delay=5ms)
,则可以使用以下方法创建链接:

for i in d:
    for j in d[i]:
        net.addLink(i, j, **d[i][j])


k=freeze(d[i].values)
您忘记了
.values()
函数末尾的括号。相反,您实际上指的是values函数对象。感谢您指出这一点。但我仍然收到错误异常:错误创建接口对(s1-ethdict_values([{},{},{}]),s2-eth1):bash:意外标记“”附近出现语法错误('bash?此代码调用bash?您必须向我们显示该部分代码。代码很长,需要注释。我如何向您显示它。不要将代码放在注释中;编辑问题。
k=freeze(d[I].values)
您忘记了
.values()末尾的括号
function。实际上,您指的是values函数对象。感谢您指出这一点。但我仍然收到错误异常:创建接口对时出错(s1-ethdict_values([{},{},{},{}]),s2-eth1):bash:意外标记附近的语法错误`('bash?此代码调用bash?您必须向我们显示部分代码。代码非常长,需要注释。我如何向您显示它。不要将代码放入注释中;编辑问题。感谢您的注释。它正在创建网络,但链接中没有带宽和延迟。请注意,在您的输入中,某些链接缺少bw和延迟(例如,s1到s2)而其他人(s7到h5)你是对的。我分析了一个yaml文件,其中有些链接有链接参数,有些没有链接参数。我需要一次性构建网络,即通过循环。我使用了以下方法来表示I in d.keys():表示j in d[I]。keys():如果d[I]。value()是dict:#k=freeze(d[I].values())net.addLink(i,j,**d[i][j])else:net.addLink(i,j)我仍然没有得到链接参数。感谢您的评论。它正在创建网络,但链接中没有带宽和延迟。请注意,在您的输入中,一些链接缺少bw和延迟(例如,s1到s2),而其他链接缺少(s7到h5)你是对的。我分析了一个yaml文件,其中一些链接有链接参数,而一些没有。我需要一次性构建网络,即通过循环。我使用以下方法来构建I in d.keys():对于j in d[I]。keys():if d[I]。values()是dict:#k=freeze(d[I].values())net.addLink(I,j,**d[I][j] )else:net.addLink(i,j)我仍然没有得到链接参数。