Skip to content
Snippets Groups Projects
Commit be019ce0 authored by Paul Sokolovsky's avatar Paul Sokolovsky
Browse files

objdict: Implement construction from iterable of pairs.

Pairs are limited to tuples so far.
parent 12a04392
Branches
No related tags found
No related merge requests found
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include "mpconfig.h" #include "mpconfig.h"
#include "qstr.h" #include "qstr.h"
#include "obj.h" #include "obj.h"
#include "objtuple.h"
#include "runtime0.h" #include "runtime0.h"
#include "runtime.h" #include "runtime.h"
...@@ -39,13 +40,22 @@ STATIC mp_obj_t dict_make_new(mp_obj_t type_in, uint n_args, uint n_kw, const mp ...@@ -39,13 +40,22 @@ STATIC mp_obj_t dict_make_new(mp_obj_t type_in, uint n_args, uint n_kw, const mp
dict = mp_obj_new_dict(0); dict = mp_obj_new_dict(0);
break; break;
case 1: case 1: {
if (MP_OBJ_IS_TYPE(args[0], &mp_type_dict)) { if (MP_OBJ_IS_TYPE(args[0], &mp_type_dict)) {
return dict_copy(args[0]); return dict_copy(args[0]);
} }
// TODO create dict from an arbitrary mapping! // TODO create dict from an arbitrary mapping!
// TODO create dict from an iterable!
assert(false); // Make dict from iterable of pairs
mp_obj_t iterable = mp_getiter(args[0]);
mp_obj_t dict = mp_obj_new_dict(0);
// TODO: support arbitrary seq as a pair
mp_obj_tuple_t *item;
while ((item = mp_iternext(iterable)) != MP_OBJ_NULL) {
mp_obj_dict_store(dict, item->items[0], item->items[1]);
}
return dict;
}
default: default:
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_TypeError, "dict takes at most 1 argument")); nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_TypeError, "dict takes at most 1 argument"));
......
print(dict([(1, "foo")]))
d = dict([("foo", "foo2"), ("bar", "baz")])
print(sorted(d.keys()))
print(sorted(d.values()))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment