diff -r be3874cf87f3 Lib/test/test_tools/test_unparse.py --- a/Lib/test/test_tools/test_unparse.py Sat Mar 05 14:05:45 2016 +0200 +++ b/Lib/test/test_tools/test_unparse.py Sat Mar 05 16:54:42 2016 -0500 @@ -134,6 +134,11 @@ class UnparseTestCase(ASTTestCase): # Tests for specific bugs found in earlier versions of unparse + def test_dict_unpacking_in_dict(self): + "for dictionary unpacking operator in dicts e.g. {**{'y': 2}}, PEP 448" + self.check_roundtrip(r"""{**{'y': 2}, 'x': 1}""") + self.check_roundtrip(r"""{**{'y': 2}, **{'x': 1}}""") + def test_fstrings(self): # See issue 25180 self.check_roundtrip(r"""f'{f"{0}"*3}'""") diff -r be3874cf87f3 Tools/parser/unparse.py --- a/Tools/parser/unparse.py Sat Mar 05 14:05:45 2016 +0200 +++ b/Tools/parser/unparse.py Sat Mar 05 16:54:42 2016 -0500 @@ -456,12 +456,18 @@ def _Dict(self, t): self.write("{") - def write_pair(pair): - (k, v) = pair + def write_key_value_pair(k,v): self.dispatch(k) self.write(": ") self.dispatch(v) - interleave(lambda: self.write(", "), write_pair, zip(t.keys, t.values)) + def write_item(item): + (k, v) = item + if k is None: # for dictionary unpacking operator in dicts {**{'y': 2}}, PEP 448 + self.write("**") + self.dispatch(v) + else: + write_key_value_pair(k,v) + interleave(lambda: self.write(", "), write_item, zip(t.keys, t.values)) self.write("}") def _Tuple(self, t):