使用嵌套循环最小化python代码占用

使用嵌套循环最小化python代码占用,python,Python,我有一个包含两个字典列表的代码,应该在比较两个列表的基础上生成最终的字典 代码如下: list_a = [ {'e1':20}, {'e1':11.2}, {'e1':20.33}, {'e1':19.34}, {'e1':18.2} ] list_b = [ {'id': 1, 'e1':20, 'status':True}, {'id': 2, 'e1':11.2, 'status':False}, {'id': 3, 'e1':20.33

我有一个包含两个字典列表的代码,应该在比较两个列表的基础上生成最终的字典

代码如下:

list_a = [
   {'e1':20},
   {'e1':11.2},
   {'e1':20.33},
   {'e1':19.34},
   {'e1':18.2}
 ]

list_b = [
   {'id': 1, 'e1':20, 'status':True},
   {'id': 2, 'e1':11.2, 'status':False},
   {'id': 3, 'e1':20.33, 'status':True}
]

mydict = {}
for b in list_b:
  mydict.setdefault(b['id'], {})
  if b['status']:
    for a in list_a:
        if b['e1'] - a['e1'] > 1:
            mydict[b['id']] = b['e1'] - a['e1']

只是想知道是否有任何解决方案可以提高代码的效率(速度和空间方面)?

缩短时间的一种方法是避免使用
mydict.setdefault

import time

list_a = [
    {'e1': 20},
    {'e1': 11.2},
    {'e1': 20.33},
    {'e1': 19.34},
    {'e1': 18.2}
]

list_b = [
    {'id': 1, 'e1': 20, 'status': True},
    {'id': 2, 'e1': 11.2, 'status': False},
    {'id': 3, 'e1': 20.33, 'status': True}
]

time_original = 0
time_new = 0

for loop in range(1000000):
    time1 = time.time()
    mydict = {}
    for b in list_b:
        mydict.setdefault(b['id'], {})
        if b['status']:
            for a in list_a:
                if b['e1'] - a['e1'] > 1:
                    mydict[b['id']] = b['e1'] - a['e1']
    time2 = time.time()

    time_original += time2 - time1

    time3 = time.time()
    example_dict = {}
    for b in list_b:
        example_dict[b['id']] = {}
        if b['status']:
            for a in list_a:
                if b['e1'] - a['e1'] > 1:
                    example_dict[b['id']] = b['e1'] - a['e1']
    time4 = time.time()

    time_new += time4 - time3

print('Using mydict.setdefault(b[\'id\'], {})')
print(time_original / 1000000)
print(mydict)
print()
print('Using example_dict[b[\'id\']] = {}')
print(time_new / 1000000)
print(example_dict)
结果,

Using mydict.setdefault(b['id'], {})
2.1369829177856445e-06
{1: 1.8000000000000007, 2: {}, 3: 2.129999999999999}

Using example_dict[b['id']] = {}
2.096635103225708e-06
{1: 1.8000000000000007, 2: {}, 3: 2.129999999999999}

速度效率、空间效率或文件大小效率?请添加预期值output@J2015你用的是进口货吗?这与python 3.7中的描述不同。您的代码不起作用,因此目前无法提高效率(至少,不是通常意义上的效率)。有,这可能更适合您的问题。0.04e-06-即0.00000004秒。。。。似乎没什么意义?除此之外,使用defaultdict(dict)会更快……@PatrickArtner我同意节省时间是毫无意义的,但这纯粹是学术观察。defaultdict(dict)不会产生相同的输出,结果dict的长度将仅为2而不是3。