首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >python for循环返回最后一个值

python for循环返回最后一个值
EN

Stack Overflow用户
提问于 2018-07-15 07:19:14
回答 2查看 483关注 0票数 1

我有一个函数:

代码语言:javascript
复制
def devices():
    devices = []
    device = {}
    with open('devices.txt', 'r') as file:
        lines = file.readlines()

    print(lines)
    for line in lines:
        device['ip'] = line.split(';')[0].strip()
        device['name'] = line.split(';')[1].strip()

        print(device)
        devices.append(device)


print(devices)

return devices

File devices.txt有一个下一个布局:

代码语言:javascript
复制
1.1.1.1;device-1
2.2.2.2;device-2

当我在循环中打印设备字典时-它是正常的。然而,作为返回,我得到了下一个列表:

代码语言:javascript
复制
[{'ip':'2.2.2.2', 'name':'device-2'},{'ip':'2.2.2.2', 'name':'device-2'}]

为什么?为什么不是文件中的所有设备,而是最后一个2次。

EN

回答 2

Stack Overflow用户

发布于 2018-07-15 10:00:23

真的很有趣的问题!一开始我有点困惑,为什么它不工作,然后我意识到循环之外的dic。我通常不使用dics,因为这些奇怪的问题,在你的例子中,当变量已经被附加时,改变它。下面是您的代码的一个简单解决方案

代码语言:javascript
复制
def devices():
    devices = []
    with open('devices.txt', 'r') as file:
        lines = file.readlines()

    #print(lines)
    for line in lines:
    device = {}
        device['ip'] = line.split(';')[0].strip()
        device['name'] = line.split(';')[1].strip()



    print(device)
        devices.append(device)
    print(devices)

(如果你想看看dics有多奇怪,你可以在追加之前写device = {},输出结果是:{'ip':'2.2.2.2','name':'device-2'},{} {'ip':'2.2.2.2','name':'device-2'}是如何实现的,不知道)

票数 0
EN

Stack Overflow用户

发布于 2018-07-15 08:19:31

代码语言:javascript
复制
def devices():
    with open('devices.txt', 'r') as file:
        return [{'ip':line.split(';')[0].strip(), 'name':line.split(';')[1].strip()} for line in file.readlines()]
print(devices())
# [{'name': 'device-1', 'ip': '1.1.1.1'}, {'name': 'device-2', 'ip': '2.2.2.2'}]
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51344106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档