Элементы списка, являющиеся словарями с одной записью, делают обработку более трудоемкой, чем необходимо. Если у вас есть только одна учетная запись на элемент в списке, вы должны вместо этого сделать их кортежами (учетная запись, распределение).
преобразование List1 в этот формат (переменная allocs) делает режим кода простым:
List1 = [{'A001':{'ABC':0.4, 'ABD':0.6}}, {'A002':{'ABC':0.5, 'ABD':0.4, 'EFG':0.1}}, {'A003':{'ABC':0.4, 'ABD':0.6}}, {'A004':{'ABC':0.4, 'ABD':0.6}}]
allocs = [ list(account.items())[0] for account in List1]
for account,alloc in allocs:
dups = [ac for ac,al in allocs if al == alloc and ac != account]
print( account, ", ".join(dups or ["no duplicates"]))
A001 A003, A004
A002 no duplicates
A003 A001, A004
A004 A001, A003
Вы снова используете ту же переменную (key
) в Вашем лямбда-выражении.
Видят мою статью о анонимные методы для получения дополнительной информации, и существуют много связанные ТАК вопросы также:
, простая фиксация должна скопировать переменную сначала:
List<string> keys = FillKeys()
foreach (string key in keys){
string copy = key;
q = q.Where(c => c.Company.Name.Contains(copy));
}
Возможно полученная переменная проблема; попытайтесь добавить:
List<string> keys = FillKeys()
foreach (string key in keys){
string tmp = key;
q = q.Where(c => c.Company.Name.Contains(tmp));
}