python迭代2个列表然后将更长的列表分配给更短的列表

时间:2018-02-04 07:33:59

标签: python

我有两个不同长度的数组。 一组用户信息 第二代代理信息的二元组。 我有50个不同的代理和100个不同的帐户。 它们都是一系列字典。

下面是代理服务器阵列的样子:

[
    {
        "username": "", 
        "ip": "", 
        "password": "", 
        "port": "",
        "accounts":[] ## this is where I store 2 accounts.
    }
] 

以下是用户数组的样子:

[
    {
        "username": "", 
        "first_name": "", 
        "password": "", 
        "email": "", 
        "proxy": ""
    }
]

我的目标: 我想迭代50多个不同的代理,然后将2个帐户附加到每个代理。 所以我的输出就像是

[
    {
        "username": "", 
        "ip": "", 
        "password": "", 
        "port": "",
        "accounts":[] ## this is where I store 2 accounts.
    }
] 

我想为每个代理分配50个代理2个帐户。

这是我迄今为止所尝试过的并且悲惨地失败了。

proxyData = proxyData() # 50 proxy list
userData = userData() # 100 user list.
proxy_len = len(userData)


idx = 1
for proxy in proxyData:
    proxy['users'] = userData[idx - 1], userData[idx]
    idx = (idx + 1) % proxy_len
    print idx

以下代码为我的所有用户生成大量相同的代理;我想为每个用户提供2个代理。

我目前的错误是;迭代似乎是错误的,并给我这个输出。

[
    {
        "username": "", 
        "ip": "", 
        "password": "", 
        "port": "", 
        "accounts": [
            {
                "username": "name8338614", 
                "first_name": "Name", 
                "password": "41asdasdasd", 
                "email": "name83384@gmail.com", 
                "proxy": ""
            }, 
            {
                "username": "smith83213334", 
                "first_name": "Smith", 
                "password": "4108605ciplov", 
                "email": "smith83213334@gmail.com", 
                "proxy": ""
            }
        ]
    }, 
    {
        "username": "laurenburn7800", 
        "ip": "104.160.233.44", 
        "password": "f61h66jyu2", 
        "port": "21265", 
        "users": [
            {
                "username": "smith83213334", 
                "first_name": "Smith", 
                "password": "4108605ciplov", 
                "email": "smith83213334@gmail.com", 
                "proxy": ""
            }, 
            {
                "username": "johnson111765968", 
                "first_name": "Johnson", 
                "password": "4108605Diplov", 
                "email": "johnson111765968@gmail.com", 
                "proxy": ""
            }
        ]
    }, 
]

你看到smith83213334用户如何迭代两次;它不应该。每个帐户只应迭代一次。在这种情况下,用户johnson111765968应该已经在smith83213334上。

1 个答案:

答案 0 :(得分:1)

为什么不将帐户存储为tuple,因为您知道会有两个值。 这可以通过ziprange来实现。 zip会生成一个迭代,一旦两个范围中较短的一个用尽就会结束。

   for proxy,idx in zip(proxyData, range(0,len(userData), 2)):
       user1, user2 = userData[idx], userData[idx + 1]
       proxy['account'] = user1, user2