Я хочу упомянуть следующую опцию, которая конкретно не упоминается в PEP8, но отмечена в документации по словарю : «Когда ключи представляют собой простые строки, иногда проще определить пары, используя ключевые аргументы: "
my_dict = dict(
foo = 1,
bar = 2,
baz = 3,
...
)
Это не решает вопрос отступа, однако.
Это не так ясно, как другие способы, но все должно работать нормально:
dictionary.Keys.ToList().ForEach(i => dictionary[i] = 0);
Моей другой альтернативой было бы создать метод расширения ForEach, подобный этому:
public static class MyExtensions
{
public static void ForEach<T>(this IEnumerable<T> items, Action<T> action)
{
foreach (var item in items)
{
action(item);
}
}
}
Затем используйте его так:
dictionary.ForEach(kvp => kvp.Value = 0);
Это не сработает в этом случае, так как Value не может быть присвоено.
LINQ - это диалект запросов, а не напрямую язык мутации.
Чтобы изменить значения существующего словаря, foreach
, вероятно, ваш друг:
foreach(int key in dictionary.Keys) {
dictionary[key] = 1;
}
foreach (var item in dictionary.Keys)
dictionary[item] = 1;
Интересно, а зачем вам это делать.