Другие люди уже указали, как решить эту проблему, но, возможно, не объяснили, почему.
То, что вы пытаетесь сделать, - это создавать значения во вложенном словаре или, другими словами, в словаре словарей.
Таким образом, ваш первый словарь называется commandList
с ключами self.clientname
. Каждое из значений в этом словаре фактически является самим словарем - или оно должно быть.
Однако вы никогда не говорите Python, что эти значения должны быть словарями, и поэтому вы получаете ошибку. Как уже указывалось, из приведенного вами кода это должно происходить и во втором фрагменте.
Есть много способов решить эту проблему, но проще всего было бы сделать что-то вроде:
if not commandlist.has_key(self.clientname):
commandlist[self.clientname] = {} # Create an empty dictionary.
commandlist[self.clientname]['secondlevelkey'] = 'value'
Возможно, вас должно немного беспокоить, что вы используете глобальные переменные. Я вижу, что вы делаете это как синхронизацию потоков, что является плохой идеей, потому что вы не делаете никакой блокировки переменных или контроля доступа, чтобы предотвратить мертвые / живые блокировки и другие ошибки синхронизации. Не зная, как вы используете этот список команд, невозможно сказать, как вы должны его решить.
Если вы дадите больше информации о проблеме, мы, возможно, посоветуем, как лучше ее решить.