这段代码可以写成两行吗?

时间:2017-09-16 06:38:06

标签: python

我有一种感觉,使用setdefault方法或lamda,这段代码可以写成两行:

variables = ['a','b','c','d']
for value in indefinite_dict.values():
    str1 = immediate_instantiation.get(value)
    if str1 == None:
        immediate_instantiation.update({value:variables[0]})
        del variables[0]

它循环遍历indefinite_dict的值并将它们放入并且如果该值不是立即实例化dict中的键,则它将该值作为变量列表的第一个成员的值添加到该dict中的条目并删除变量列表的第一个成员。

2 个答案:

答案 0 :(得分:1)

如果您Sub пг() Dim book1 As Workbook Dim book2 As Workbook Set book1 = Workbooks.Open("E:\Super M\Проект ставки\Поиск решения\Усов 6\Процесс создания\Индекс формы команды\Вспомогательные проги\пг\1.xlsx") Set book2 = Workbooks.Open("E:\Super M\Проект ставки\Поиск решения\Усов 6\Процесс создания\Индекс формы команды\Вспомогательные проги\пг\2.xlsx") 'по листам book1.Worksheets("Лист1").Range("C3:D5").Copy book2.Worksheets("Лист1").Range("C3:D5") book1.Worksheets("Лист1").Range("F3:G5").Copy book2.Worksheets("Лист1").Range("F3:G5") book1.Close End Sub 中的值已被删除,即使variables 中的相应密钥已存在,且该密钥具有相同的值,您也可以你只能用immediate_instantiation

来做到这一点
setdefault

尽管如此,要将它归结为两行而没有任何其他上下文会采用不同的(并且有点令人不愉快的)方法:

for value in indefinite_dict.values():
    if immediate_instantiation.setdefault(value, variables[0]) is variables[0]:
        del variables[0]

并且updates = (v for v in indefinite_dict.values() if v not in immediate_instantiation) immediate_instantiation.update({v: variables.pop(0) for v in updates}) 最好是indefinite_dict - 否则您将以可能的随机顺序删除变量! (不要依赖Python 3.6的dict表示。)

如果您之后不需要OrderedDict variables保证至少与variables一样长,那么非变异解决方案就是更清洁,请注意:

updates

答案 1 :(得分:0)

一线解决方案:

immediate_instantiation.update({value: variables.pop(0) for value in indefinite_dict.values() if value not in immediate_instantiation})