Add dict.items

This commit is contained in:
Aviv Palivoda committed 2019-03-05 22:41:42 +02:00
1 parent 37118c7d75
commit 475476df71
2 files changed
+30 -4

No files matched your search

+8 -2
View File
@@ -20,6 +20,12 @@ assert len(a) == 0
a = {'a': 5, 'b': 6}
res = set()
for num in a.values():
res.add(num)
for value in a.values():
res.add(value)
assert res == set([5,6])
count = 0
for (key, value) in a.items():
assert a[key] == value
count += 1
assert count == len(a)
+22 -2
View File
@@ -273,8 +273,7 @@ fn dict_values(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult {
let values = get_elements(dict)
.values()
.map(|(_k, v)| v)
.cloned()
.map(|(_k, v)| v.clone())
.collect();
let values_list = vm.ctx.new_list(values);
@@ -289,6 +288,26 @@ fn dict_values(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult {
Ok(iter_obj)
}
fn dict_items(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult {
arg_check!(vm, args, required = [(dict, Some(vm.ctx.dict_type()))]);
let items = get_elements(dict)
.values()
.map(|(k, v)| vm.ctx.new_tuple(vec![k.clone(), v.clone()]))
.collect();
let items_list = vm.ctx.new_list(items);
let iter_obj = PyObject::new(
PyObjectPayload::Iterator {
position: Cell::new(0),
iterated_obj: items_list,
},
vm.ctx.iter_type(),
);
Ok(iter_obj)
}
fn dict_setitem(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult {
arg_check!(
vm,
@@ -367,4 +386,5 @@ pub fn init(context: &PyContext) {
);
context.set_attr(&dict_type, "clear", context.new_rustfunc(dict_clear));
context.set_attr(&dict_type, "values", context.new_rustfunc(dict_values));
context.set_attr(&dict_type, "items", context.new_rustfunc(dict_items));
}