我有一种感觉,使用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中的条目并删除变量列表的第一个成员。
答案 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})